- Cache-Control: 캐시 제어
- max-age : 캐시 유효시간, 초단위
- no-cache : 데이터는 캐시해도 되지만, 항상 오리진 서버에 검증하고 사용
- no-store : 데이터에 민감한 정보가 있으므로 저장 X (메모리에서 사용하고 최대한 빠른 삭제)
- Last-Modefied : 데이터가 마지막에 수정된 시간
위 기본 동작의 응답 결과로 수정된 시간도 같이 가져옴
ㄴ 요청 시 if-modeified-since: [?] 헤더에 추가 -> HTTP 바디을 빼고 헤더만 클라이언트에 전송, 304 Not Modified -> 캐시 조회
- Last-Modeified
- HTTP 헤더에 수정날짜를 포함해서 전송
- ETag (Entitiy Tag)
- 캐시용 데이터에 임의의 고유한 버전 이름을 달아둠
- 데이터가 변경되면 이 이름을 바꾸어서 변경 (Hash를 다시 생성)
If-Modified-Since
- 이후에 수정이 되었는지?
- Last-Modefied 사용
단점
- 1초 미만 단위로 캐시 조정이 불가능
- 날짜 기반의 로직
- 같은 데이터를 수정해서 데이터 결과가 똑같은 경우
- 서버에서 별도의 캐시 로직을 관리하고 싶은 경우
If-None-Match
- ETag 사용
- ETag만 보내서 같으면 유지, 다르면 다시 받기
기본 흐름
사용자 -> 프록시 캐시 서버 -> 프록시 캐시 서버에 해당 캐시가 있는지 확인 -> 없다면 오리진 서버에서 데이터 다운, 있다면 프록시 서버에서 데이터 전송
- 최초 사용자는 캐시가 없으므로 느림
해당 헤더
- Cache-Control
- public: 응답이 public, 캐시에 저장되어도됨
- private: 응답이 해당 사용자만을 위한 것, private 캐시에 저장되어야됨 (기본값)
- s-maxage: 프록시 캐시에만 적용되는 max-age
- Age: 60 (HTTP 헤더)
- 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초)
- Cache-Control
- no-cache : 데이터는 캐시 가능, 항상 오리진 서버에 검증 후 사용
- no-store : 데이터에 민감한 정보가 있으므로 저장 X
- must-revalidate : 캐시 만료 후 최초 조회 시 오리진 서버에 검증
ㄴ 오리진 서버에 접근 불가할 경우, 504 Gateway TimeOut이 무조건 발생- Pragma : 과거 브라우저(HTTP 1.0 하위호환)
- no-cache
해당 페이지에 캐시가 반드시 없어야만 된다면 위에 헤더들을 다 추가할 것
참고 자료