캐시 기본 동작
- 캐시가 없으면 데이터가 변경되지 않아도 계속 같은 데이터를 다운로드 받아야 함 -> 느리고 비용이 많이 듦
- 캐시 적용 -> 비용 절감, 속도 개선, 빠른 사용자 경험 등
- 캐시 적용: cache-control: max-age=시간 -> 캐시가 유효한 시간(초)
- 응답 결과를 캐시에 저장
- 이후 요청 시 캐시 유효 시간 검증
- 유효한 경우 캐시에서 조회
- 캐시 만료된 경우 서버에 재요청하여 갱신함
검증 헤더와 조건부 요청
캐시 만료 후
캐시 제어 헤더
- Cache-Control: 캐시 제어
- Cache-Control: max-age
- Cache-Control: no-cache
- 데이터 캐시 가능하지만, 원서버(Origin) 검증 후 사용
- Cache-Control: no-store
- Pragma: 캐시 제어(하위 호환)
- Expires: 캐시 유효 기간(하위 호환)
프록시 캐시
- Origin 서버와 요청 브라우저 사이 프록시 캐시 서버(public 캐시)를 저장함
- Cache-Control: public
- Cache-Control: private
- 특정 사용자에게만 해당, private 캐시에 저장 가능(기본값)
- Cache-Control: s-maxage
- Age: 60 (HTTP 헤더) 오리진 서버에서 응답 후 프록시 캐시에 머문 시간(초)
캐시 무효화
- Cache-Control: no-cache
- 데이터 캐시 가능하지만, 원 서버(Origin)에 검증하고 사용
- 원 서버에 접근할 수 없는 경우 서버 설정에 따라 이전 데이터 or 오류 발생
- Cache-Control: no-store
- Cache-Control: must-revalidate
- 캐시 만료 후 최초 조회 시 원서버에 검증 필요
- 원 서버에 접근할 수 없는 경우 반드시 오류 발생(504 Gateway Timeout)
- Pragma: no-cache
[출처] 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한, 인프런