문제

주위를 둘러 보았지만 두 가지 모두를 모두 사용해야하는지 알아낼 수 없었습니다. 그리고 만료 된 헤더 또는 하나 또는 다른 하나.

내가하려는 것은 내 플래시 파일 (및 기타 이미지 및 해당 파일에 변경 될 때 업데이트 될뿐만 아니라 업데이트되는 것입니다.

나는 파일 이름을 바꾸거나 URL 끝에 이상한 숯을 두어 캐시되지 않도록하는 것과 같은 특별한 일을하고 싶지 않습니다.

또한, 이것을 지원하기 위해 PHP 스크립트에서 나의 끝에 프로그램적으로해야 할 일이 있습니까? 아니면 모두 아파치입니까?

도움이 되었습니까?

해결책

그것들은 약간 다릅니다. ETAG에는 고객이 앞으로 해당 파일을 다시 요청할지 여부를 결정하는 데 사용할 수있는 정보가 없습니다. Etag가 전부라면 항상 요청해야합니다. 그러나 서버가 클라이언트 요청에서 ETAG를 읽으면 서버는 파일을 보내야하는지 (http 200) 또는 클라이언트에게 로컬 사본을 사용하도록 지시 할 수 있습니다 (HTTP 304). ETAG는 기본적으로 파일의 내용이 변경 될 때 의미 적으로 변경되는 파일의 체크섬입니다.

만료 헤더는 클라이언트 (및 프록시/캐시)가 서버에 요청 해야하는지 여부를 결정하는 데 사용됩니다. 만료 날짜가 가까워 질수록 클라이언트 (또는 프록시)가 서버에서 해당 파일에 대한 HTTP 요청을 할 가능성이 높습니다.

따라서 실제로 원하는 것은 두 헤더를 사용하는 것입니다. 만료 헤더를 컨텐츠가 얼마나 자주 변경되는지에 따라 합리적인 값으로 설정하십시오. 그런 다음 클라이언트가 서버에 요청을 보낼 때 파일을 다시 전송할지 여부를 더 쉽게 결정할 수 있도록 ETAG를 전송하도록 구성합니다.

ETAG에 대한 마지막 메모 - Apache를 실행하는 여러 시스템이있는로드 밸런스 서버 설정을 사용하는 경우 ETAG 생성을 끄는 것이 좋습니다. 이는 inodes가 서버간에 다른 ETAG 해시 알고리즘의 일부로 사용되기 때문입니다. 계산의 일부로 Inodes를 사용하지 않도록 Apache를 구성 할 수 있지만 모든 서버에 대해 동일한 ETAG가 생성되도록 파일의 타임 스탬프가 정확히 동일했는지 확인하려고합니다.

다른 팁

에타그 그리고 마지막으로 수정되었습니다 헤더입니다 유효성 검사기.

브라우저 및/또는 캐시 (리버스 프록시)가 동일한 이름을 보존하더라도 파일/페이지가 변경되었는지 이해하도록 도와줍니다.

만료 그리고 캐시 제어 주고 있습니다 정보를 새로 고치십시오.

이것은 그들이 몇 시간 또는 얼마나 오래, 캐시에 페이지/파일을 유지할 수있는 시간까지, 브라우저 및 그 사이의 프록시를 알려줍니다.

따라서 문제는 일반적으로 하나의 유효성 검사기, ETAG 또는 최종 수정 및 사용, 만료 또는 캐시 제어를 새로 고침 할 수있는 유효성 검사기입니다.

Expires 그리고 Cache-Control "강한 캐싱 헤더"입니다.

Last-Modified 그리고 ETag "약한 캐싱 헤더"입니다.

먼저 브라우저 확인 Expires/Cache-Control 서버에 요청할지 여부를 결정하려면

요청을 해야하는 경우 보내집니다. Last-Modified/ETag HTTP 요청에서. 만약 Etag 문서의 값은 서버가 200 대신 304 코드를 보내고 컨텐츠가 없습니다. 브라우저는 캐시에서 내용을로드합니다.

기본적으로 Apache는 ETAG를 생성합니다 기반 파일의 inode 번호, 마지막 수정 날짜 및 크기는 원하는 작업을 수행하는 데 완벽하게 적합합니다. 또한 디스크에서 파일의 마지막 수정 시간을 기반으로 마지막으로 수정 된 헤더를 기본적으로 생성 할 것이라고 생각합니다.

아마도 Apache가 미래에 1 년의 만료 헤더를 보내도록해야합니다 ( http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html#sec14.21) 따라서 브라우저가 컨텐츠를 캐시 가능하다는 것을 알고 있습니다. 살펴보십시오 mod_expires 이를 구성합니다.

다른 요약 :

둘 다 사용해야합니다. Etags는 "서버 측"정보입니다. 만료는 "클라이언트 측"캐싱입니다.

  • 사용 에타그 로드 밸런스 서버가있는 경우를 제외하고. 그들은 안전하고 고객에게 당신이 당신의 편에서 무언가를 변경할 때마다 새로운 버전의 서버 파일을 가져와야한다는 것을 알릴 것입니다.

  • 만료 미래에 만료 날짜를 설정하는 것처럼주의해서 사용해야하지만 파일 중 하나를 즉시 파일 (예 : JS 파일) 중 하나를 변경하려면 일부 사용자는 오랜 시간까지 수정 된 버전을 얻지 못할 수 있습니다!

답을 놓친 것 중 하나가 언급하고 싶은 한 가지 추가 사항은 ETags 그리고 Expires/Cache-control 헤더에서.

귀하의 요구에 따라 헤더에 추가 바이트를 추가하여 패킷이 증가하여 더 많은 TCP 오버 헤드를 의미 할 수 있습니다. 다시 한 번, 헤더에 두 가지가 필요한 오버 헤드가 필요한지 또는 요청에 추가 무게를 추가하여 성능이 줄어 듭니다.

Kyle Simpson 의이 훌륭한 블로그 게시물에서 자세한 내용을 읽을 수 있습니다. http://calendar.perfplanet.com/2010/bloated-request-response-headers/

내 견해로는 Expire Header를 사용하면 내 데이터가 오래 될 때 클라이언트에게 알릴 수 있으며 ETAG를 사용하면 서버가 클라이언트의 ETAG 값을 확인합니다.

ETAG는 리소스가 사본을 사용해야하는지 여부를 결정하는 데 사용됩니다. 그리고 캐시 제어와 같은 헤더를 만료합니다. 캐시가 수십 년 전에 클라이언트가 로컬 리소스를 가져와야한다고 클라이언트에게 알립니다.

현대 사이트에는 종종 Hash라는 파일이 제공됩니다. app.98a3cf23.js, 만료 헤더를 사용하는 것이 좋은 관행입니다. 이 외에도 네트워크 비용도 줄입니다.

도움이되기를 바랍니다;)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top