웹 서버에 헤더가 포함되어 있지 않더라도 캐싱이 작동하는 이유에 대한 질문에 대답하려면 다음을 수행하십시오.
- 만료 :
[a date]
- 캐시 제어 : max-age =
[seconds]
서버는 중간 프록시에게 내용을 캐시하지 않도록 친절하게 요청했습니다 (즉, 항목은 개인 캐시 에만 캐시해야합니다 (예 : 자신의 로컬 컴퓨터에만)).
그러나 서버는 모든 종류의 캐싱 힌트를 포함하는 것을 잊었습니다.
- 그들은 Expires 를 포함하는 것을 잊었 으므로 브라우저는 그 날짜까지 캐시 된 사본을 사용하는 것을 알고 있습니다.
- 그들은 Max-Age 를 포함하는 것을 잊었 으므로 브라우저는 캐시 된 항목이 얼마나 오래 지속되는지 알고 있습니다.
- 브라우저가 조건부 요청을 수행 할 수 있도록 E-Tag 를 포함하는 것을 잊었습니다.
그러나 응답에 Last-Modified 날짜 가 포함 되었습니다.
Last-Modified: Tue, 16 Oct 2012 03:13:38 GMT
브라우저는 파일이 수정 된 날짜를 알고 있기 때문에 조건부 요청을 수행 할 수 있습니다 . 서버에 파일을 요청하지만 2012/10/16 3:13:38 이후 파일이 수정 된 경우에만 파일을 보내도록 서버에 지시합니다.
GET / HTTP/1.1
If-Modified-Since: Tue, 16 Oct 2012 03:13:38 GMT
서버는 요청을 받고 클라이언트가 최신 버전을 이미 가지고 있음을 인식합니다. 클라이언트를 보내고 200 OK
페이지의 내용을 보내는 대신 캐시 된 버전이 양호 함을 알려줍니다.
304 Not Modified
브라우저는 서버에 요청을 보내는 데 시간이 걸리고 응답을 기다리는 데 어려움을 겪었지만 정적 콘텐츠를 다시 다운로드해야하는 비용을 절감했습니다.
왜 최대 연령 ? 왜 만료 됩니까?
때문에 마지막으로 수정 안됐다.
서버의 모든 날짜와 관련된 날짜 가 있는 것은 아닙니다 . 나는 즉시 페이지를 짓고 있어요 경우, 그것과 관련된 일이 없다 - 그것의 지금 . 그러나 사용자가 15 초 동안 홈페이지를 캐시하도록 완벽하게 기꺼이합니다.
200 OK
Cache-Control: max-age=15
사용자가 망치면 F515 초 동안 캐시 된 버전을 계속 얻습니다. 회사 프록시 인 경우 동일한 15 초 동안 동일한 페이지를 방문하는 모든 67198 명의 사용자는 모두 동일한 내용을 얻습니다. 모두 캐시에서 제공됩니다. 모두를위한 성능 승리.
추가의 미덕은 Cache-Control: max-age
브라우저가 조건부 요청 을 수행 할 필요가 없다는 것 입니다.
- 지정한 경우에만
Last-Modified
브라우저가 요청을 수행 If-Modified-Since
하고 304 Not Modified
응답을 감시해야합니다.
- 을 지정
max-age
하면 브라우저가 네트워크 왕복을 겪을 필요조차 없습니다. 내용은 캐시에서 바로 나옵니다.
"Cache-Control : max-age"와 "Expires"의 차이점
Expires
현대 (c. 1998) Cache-Control: max-age
헤더 와 동등한 유산입니다 .
1998 년 이후에 작성된 웹 사이트는 Expires
더 이상 사용 하지 말고 대신 사용하십시오 max-age
.
ETag 란 무엇입니까?
ETag 는 Last-Modified 와 비슷하지만 날짜 일 필요는 없습니다. 단지 무언가 일뿐 입니다.
데이터베이스에서 제품 목록을 가져 오는 경우 서버는 rowversion
날짜가 아닌 ETag로 마지막 을 보낼 수 있습니다 .
200 OK
ETag: "247986"
내 ETag는 정적 리소스 (예 : 이미지, js, css, 글꼴) 또는 캐시 된 렌더링 된 페이지의 SHA1 해시 일 수 있습니다.
200 OK
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Last-Modified 기반의 조건부 요청의 경우와 정확히 같습니다 .
GET / HTTP/1.1
If-Modified-Since: Tue, 16 Oct 2012 03:13:38 GMT
304 Not Modified
ETag를 기반으로 조건부 요청을 수행 할 수 있습니다 .
GET / HTTP/1.1
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
304 Not Modified
파일 이외의 것 또는 날짜 개념이있는 것에서 작동 ETag
하기 Last-Modified
때문에 An 이 더 우수 합니다 . 그것은 단지 입니다