서버에서 응답시 헤더에 캐시 헤더를 추가해서 응답할 경우 클라이언트 웹 브라우저 캐시 저장소에 저장된다.
cache-control: max-age=60
캐시의 만료시간을 60초로 지정서버에서 데이터를 받을 때 캐시를 사용하면 비싼 네트워크 비용을 지불하지 않아도 된다.
그렇다면 캐시 유효 시간이 만료되었지만, 서버에서 다운 받을 데이터가 변경되지 않았을 때 캐시를 다시 사용한다면 얼마나 좋을까? -> 검증헤더 추가
Last-Modified: 2022-03-12T12:00:00
데이터의 최종 수정일을 추가해서 응답if-modified-since: 2022-03-12T12:00:00
헤더를 추가로 전송if-modified-since:
의 값을 확인하고 데이터 최종 수정일과 같다면 HTTP/1.1 304 Not Modified
응답을 내려주고(캐시정보 포함) Message body가 빠져있음 캐시 지시어
Cache-Control: max-age
캐시의 유효시간(초 단위)Cache-Control: no-cache
데이터는 캐시해도 되지만, 항상 origin 서버에 검증하고 사용Cache-Control: no-store
데이터에 민감한 정보가 있으므로 저장하면 안됨캐시 만료일 지정
expires: Mon, 01 Jan 2000 00:00:00 GMT
Cache-Control: max-age
과 함께 사용하면 expires는 무시됨, 그러므로 좀 더 유연한 Cache-Control: max-age
사용 권장한국에 있는 클라이언트와 우루과이에 있는 서버가 데이터를 주고 받는다고 하면 대척점에 있기 때문에 다른 나라중에서도 응답이 가장 느릴텐데, 한국에 캐시 서버를 만들어 origin서버로 직접 요청을 하는게 아닌 한국에 있는 캐시 서버에 접근하도록 한다면 훨씬 빠른 응답을 받을 수 있다. 이처럼 지리적으로 가까운곳에 만든 캐시 서버를 프록시 서버라고 하며 프록시 서버에 저장된 캐시를public 캐시라고 하며 클라이언트에 저장된 캐시를 private 캐시라고 한다.
Cache-Control: public
응답이 public 캐시에 저장되어도 됨Cache-Control: private
응답이 해당 사용자만을 위한 것 private 캐시에 저장돼야 함(기본값)Cache-Control: s-maxage
프록시 캐시에만 적용되는 max-age 헤더Age-60
(HTTP 헤더) 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초)정말 정말 이 데이터는 캐시되어선 절대 절대 절대!!!!!! 안된다고 한다면 아래 헤더를 다 추가할 것
Cache-Control: no-cache, no-store, must-revalidate
must-revalidate
는 캐시 만료 후 최초 조회시 origin 서버에 검증, 원 서버 접근 실패시 반드시 오류가 발생해야함 (504 Gateway Timeout), 캐시 유효 시간이라면 캐시를 사용Pragma: no-cache
(HTTP 1.0 하위 호환)
참고 no-cache는 프록시 캐시서버가 origin 서버에 접근할 수 없는 경우 프록시 캐시 서버 설정에 따라 캐시 데이터를 반환할 수 있으나 must-revalidate는 항상 오류를 발생시킴 504 상태 코드 반환