'모든 개발자를 위한 HTTP 웹 기본 지식'
김영한님 인프런 강의 정리
▪︎ 캐시 지시어
- Cache-Control : no-cache
- 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용
- Cache-Control : no-store
- 데이터에 민감한 정보가 있으므로 저장하면 안됨
캐시 무효화 응답
- Cache-Control : no-cache, no-store, must-revalidate
- Pragma : no-cache
▪︎ 조건부 요청 헤더
- 검증 헤더로 조건에 따른분기
- If-Modified-Since : Last-Modified 사용
- If-None-Match : ETag 사용
- 조건이 만족하면 200 OK
- 조건이 만족하지 않으면 304 Not Modified
If-Modified-Since 예시
데이터 미변경 예시
- 캐시: 2020/11/10 10:00:00 vs 서버: 2020/11/10 10:00:00
- 304 Not Modified, 헤더 데이터만 전송(Body 미포함)
- 전송용량 줄어듬
데이터 변경시
- 캐시: 2020/11/10 10:00:00 vs 2020/11/11 11:11:11
- 200 OK, 모든 데이터 전송(Body 포함)
- 전송용량 그대로
Last-Modified, If-Modified-Since 단점
- 1초 미만(0.x초) 단위로 캐시 조정 불가능
- 날짜 기반의 로직 사용
- 데이터를 수정했지만 결과가 같더라도 검증 불가
- 서버에서 별도의 캐시 로직을 관리하고 싶은 경우
- 크게 영향이 없는 소스 수정을 하더라도 캐시를 유지하고 싶은 경우
▪︎ 검증 헤더
- 캐시 데이터와 서버 데이터가 같은지 검증하는 데이터
- Last-Modified, ETag
ETag, If-None-Match
- ETag(Entity Tag)
- Last-Modified, If-Modified-Since 단점 보완
- 캐시용 데이터에 임의의 고유한 버전 이름을 달아둠
- 데이터가 변경되면 이 이름을 바꾸어서 변경함
Reference
https://www.inflearn.com/course/http-웹-네트워크