2012-04-03 2 views
3

must-revalidate으로 HTML 페이지를 캐싱 할 때 브라우저가 Last-Modified 또는 Etag으로 정의 된 업데이트를 확인해야 함을 의미합니다. 그러나 문제는 max-age 이전에 브라우저가 HTTP 헤더 (Last-ModifiedEtag을 분석하기 위해)를 읽으려는 웹 사이트와의 연결을 만들지 않는다는 것입니다.다시 검증해야하는 HTML 페이지를 캐시하는 방법은 무엇입니까?

브라우저에서 캐시에서 페이지를로드하기 전에 (적어도) HTTP 판독기를 읽도록 간단한 연결을 만드는 방법은 무엇입니까?

must-revalidate의 사용법을 이해할 수 없습니다! max-age 전에 업데이트를 확인하는 것은 책임지지 않습니까? max-age에 도달하면 브라우저가 웹 사이트에서 읽고 로컬 캐시를 사용하지 않기 때문입니다.

답변

8

예, must-revalidate의 이해는 잘못이다 : 그것은 (즉, "만료")가 오래된 때 캐시가이 콘텐츠를 제공하지 않을 수 있다고하지만, 그 전에 검증해야합니다. 예, 캐시 (및 브라우저)는 이론적으로 페이지가 부실하더라도 페이지를 제공하도록 설정할 수 있지만 표준에 따르면 사용자에게이를 경고해야한다고 나와 있습니다.

브라우저가 서버에서 페이지를 다시 확인하도록하려면 가장 간단한 해결책은 Cache-Control 헤더에 max-age=0을 추가하는 것입니다. 이렇게하면 브라우저가 캐시에 페이지 사본을 보관할 수 있지만 원하는대로 Last-Modified 또는 ETag의 내용을 전송하여 서버의 버전과 비교할 수 있습니다.

이전에는 no-cache을 추가 할 수 있었지만 사용자가 no-store으로 동작 할 것으로 예상했기 때문에 브라우저는 점차 동일하게 처리합니다.

머리글에 대한 자세한 내용은 HTTP/1.1 RFC, section 14.9을 확인하십시오.

+1

매우 유용한 infromation 및 실질적인 가이드,하지만 한 가지를 이해하지 못했습니다. "캐시가 만료되었을 때 캐시가이 컨텐츠를 제공 할 수는 없지만 그 전에 다시 유효성을 검사해야합니다." 어쨌든'must-revalidate'가 없더라도, 만료되면 캐시는 제공되지 않습니다. – Googlebot

+2

위의 RFC에서 14.9.3의 끝 부분을 다시 읽으면 부실 응답을 제공하도록 캐시를 구성 할 수있을뿐만 아니라 클라이언트 (브라우저)가 부실 응답이 양호하다는 것을 나타 내기 위해'max-stale '을 사용할 수 있음을 언급합니다. 또한 '경고'헤더가 첨부되어야한다고 언급합니다. –