max-age: 캐시 유효 시간 (초 단위)
no-store: 데이터는 캐시해도 되나, 원서버에 항상 검증 후 사용
no-cache: 데이터를 캐시하면 안됨.
max-age를 이용해 캐시 유효시간을 지정한 경우 유효기간이 지나면 원서버로 요청을 보낸다.
이 때 요청에 아무런 헤더를 포함하지 않으면 데이터가 변경되지 않아도 응답 바디에 데이터를 넣어서 보낸다.
검증 헤더와 조건부 요청 헤더를 사용하면 이러한 오버헤드를 줄일 수 있다.
서버에서 데이터가 변경되었는지 검증할 때 쓰이는 헤더
Last-Modified, ETag
서버에서 응답 바디에 포함할 조건을 지시하는 헤더
If-Modified-Since, If-Not-Match
콘텐츠 변경이 언제 이루어졌는지에 따라 body에 데이터를 담을지 결정된다.
클라이언트가 서버에게 GET 요청을 보낸다.
서버가 클라이언트에게 Last-Modified 헤더와 함께 body에 데이터를 담아 보낸다.
클라이언트가 1과 동일한 요청을 헤더에 If-Modified-Since 헤더와 함께 보낸다.
If-Modified: [2에서 받은 Last-Modified 값]
서버는 콘텐츠가 변경 여부에 따라 다른 응답을 보낸다.(변경 일자를 기준으로 파악)
콘텐츠 내용 변경 여부에 따라 body에 데이터를 담을지 결정된다.
ETag는 Entity Tag로 콘텐츠를 식별할 수 있는 특수한 문자열이다.
콘텐츠의 해시값, 수정된 타임스탬프의 해시 등을 사용한다.
클라이언트가 서버에게 GET 요청을 보낸다.
서버가 클라이언트에게 ETag 헤더와 함께 body에 데이터를 담아 보낸다.
클라이언트가 1과 동일한 요청을 헤더에 If-Not-Match 헤더와 함께 보낸다.
If-Not-Match: [2에서 받은 ETag 값]
서버는 컨텐츠가 변경 여부에 따라 다른 응답을 보낸다.(변경 일자를 기준으로 파악)
변경 X: 상태코드-304 Not Modified / body-데이터 X
변경 O: 상태코드-200 OK / body-데이터 O