-
재요청시 캐쉬는 어떻게 작동할까?CS/네트워크 2020. 12. 27. 16:35
브라우저에 요청에 따라 서버는 브라우저에게 ETag, Last-Modified, Expires, cache-Control 등등 Header 값을 전달하게 됩니다.
이에 응답받은 브라우저는 Header값에 따라 캐쉬 정책을 수행하게 됩니다.
※ 캐쉬 정책 우선순위
1. Last-Modified와 Etag가 같이 있다면, Etag가 우선순위가 높습니다.
2.Expires와 Cache-Control의 경우는 Cache-Control의 설정된 정책이 우선순위가 높습니다. (캐쉬가 만료가 되지 않아도 재검증 이라던지)
1. Last-Modified
1) 브라우저는 최초 응답 시 받은 Last-Modified값을 if-Modified-Since라는 헤더에 포함 시켜 페이지를 서버에게 요청하게 됩니다.
2) 서버는 요청 파일의 수정 시간을 if-Modified-Since값과 비교해 동일 하다면 304(Not Modified)으로 다르다면 새로운 Last-Modified 값을 response Header에 전송합니다.
2.ETag
1) 브라우저는 서버에 최초 응답 시 받은 ETag값을 if-none-Match라는 헤더에 포함시켜 페이지를 요청합니다.
2) 서버는 요청 파일의 Etag값을 if-none-Match헤더 값과 비교하여 동일 하다면 304, 다르다면 새로운 Etag값을 응답 헤더에 전송하게 됩니다.
3) 브라우저는 응답 코드가 304일 경우 캐쉬에 저장된 파일을 로드하고, 200이라면 파일을 새로 받은 후 Etag값을 갱신하게 됩니다.
※ Last-Modified와 ETag는 validation을 체크 하기 때문에 서버와 한번 통신이 발생하게 되며 request와 response에서 header와 cookcie등에 의한 데이터 전송(위 그림에 화살표 처럼 1KB)가 발생합니다.
3.Expires
1) 브라우저는 최초 응답 시 받은 expires 값을 비교해 기간 내라면 서버를 거치지 않고 캐쉬에서 페이지를 로드, 만약 기간이 만료되었다면 validation작업을 수행합니다.
4.Cache-Control
1) 브라우저는 최초 응답 시 받은 Cache-Control 중 max-age(초 단위)를 GMT(표준시간대)와 비교하여 기간 내라면 캐쉬에서 페이지를 로드하고 만료되었다면 validation 작업을 수행합니다.
[REFERENCE]