Question
cache-control
헤더 Public vs Private Use-cases다음 HTTP Header를 살펴보고 캐싱동작 원리를 이해한다.
캐시를 어떻게 할 것인지는 브라우저에 달려있다 (서버랑 무관)
Entity Tag
서버는 리소스들의 해시값을 만들고 이 값을 response header 에 전달한다.
클라이언트는 최초 이외의 요청에서 이 etag 값을 If-None-Match
헤더 값에 담아 보내어 서버가 현재 가지고 있는 etag 값과 비교한다.
etag 값과 일치 👌 => Return 304 Not Modified
with no resource
etag 값과 불일치 ✋ => Return 200 with new resource
브라우저가 모든 요청에If-None-Match
헤더에 etag
값을 담아 보내 validation 하고자 할 때 (리소스에 변동이 없는지 EndPoint Server에 검사)
서버는 각 파일마다 Last Modified
(최근 수정일)을 갖고있다.
브라우저가 If-Modified-Since: Thu, Jul 2021 23:11:05 GMT
를 보냈을 때 Last Modified
와 비교하여 수정 여부를 판단한다. 이 과정을 Validation 이라한다.
사실상 모든 브라우저 - ISP 사이에 이미 프록시 서버가 있으므로 클라이언트 -> 서버로의 요청에서 반드시 프록시를 거치게 되어있다. 이 프록시 서버에 저장되는 캐시를 Shared Cache (Public cache) 라고한다.
public | private |
---|---|
cache any request in Proxy Server | cache only client local |
Image, PDF 파일 같은 정적 콘텐츠는
Cache-Control: Public, max-age=86400 (매우 긴 수명), no eatag, no Last-Modified
로 지정하라.
Chrome, Safari는 매번 no-cache 정책을 사용하여 EndPoint 에 If-None-Match
헤더를 보낸다.