HTTP Header1에서 이어짐
검증 헤더1#
Last-Modified, if-modified-since
캐시 유효 시간이 초과한 경우, 서버의 데이터는 변경되었을 수도 있다.
- 캐시가 만료 후에도 데이터가 변경되지 않았다면, 저장된 캐시 재사용 가능
- ❗️단, 데이터가 같다는 사실을 확인할 방법 이 필요
Last-Modified 헤더를 통해서 이를 확인
동작방식
- 서버에서
Last-Modified헤더를 전송 - 캐시 시간 초과시, 브라우저가
if-modified-since를 서버에 전송 - 서버에서 판단
- 변경안됬으면
304 Not Modified응답(데이터전송 ❌) => 캐시 정보 갱신 & 응답 결과 재사용 - 변경됬으면
200모든 데이터 포함
검증 헤더 2#
Etag, If-None-Match
Etag: 캐시의 데이터에 임의의 버전 이름을 달아둠- 데이터가 변경대면
Etag를 변경 (Hash) If-None-Match로Etag보내서 같으면304 Not Modified, 다르면 다시 받기(200)캐시 제어 로직을 서버에서 완전히 관리
헤더 정리#
Cache-Control: 캐시 제어max-age: 유효시간(초단위)no-cache: 데이터는 캐시하지만, 항상 검증❗️no-store: 저장하면 안됨 (메모리에서 사용하고 바로 삭제)
Expires: 캐시 만료일 지정 (Cache-control:max-age권장, 중복시 무시됨)검증헤더
Etag,Last-Modified조건부 요청
If-Match,If-None-Match:Etag사용시If-Modified-Since,If-Unmodified-Since:Last-Modified사용시
프록시 캐시#

기타 캐시 지시어#
Cache-Control : public: 응답이 public 캐시에 저장되어도 됨Cache-Control : private: 응답이 해당 사용자만을 위한 것, private 캐시에 저장 (default)Cache-Control : s-maxage: 프록시 캐시에만 저장되는max-ageAge :60(Http 헤더) : 오리진 서버에서 응답 후, 프록시 캐시 내에 머문 시간(초)
캐시 무효화#
Cache-Control : no-cache, no-store, must-revalidate
must-revalidate- 캐시 만료후 최초 조회시, 원 서버에 검증해야됨
- 원 서버 접근 실패시, 반드시 오류
504
매우 중요한 정보일 경우, 무조건 원 서버의 데이터를 가져오기 위하여