캐시 제어 헤더
- Cache - Control: 캐시 제어
- Pragma: 캐시 제어(하위 호환)
- Expires: 캐시 유효 기간(하위 호환)
Cache-Control
캐시 지시어(directives)
Cache-Control: max-age
- 캐시 유효 시간, 초 단위
Cache-Control: no-cache
- 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용
Cache-Control: no store
- 데이터에 민감한 정보가 있으므로 저장하면 안됨
- (메모리에서 사용하고 최대한 빨리 삭제)
Pragma
캐시 제어(하위 호환)
- Pragma: no-cache
- HTTP 1.0 하위 호환
Expires
캐시 만료일 지정(하위 호환)
- expires: Mon, 01 Jan 1990 00:00:00 GMT
- 캐시 만료일을 정확한 날짜로 지정
- HTTP 1.0 부터 사용
- 지금은 더 유연한 Cache-Control: max-age 권장
- Cache-Control: max-age와 함께 사용하면 Expires는 무시
검증 헤더와 조건부 요청 헤더
- 검증 헤더(Validator)
- ETag: "v1.0", ETag: "asid93jkrh2l"
- Last-Modified: Thu, 04 Jun 2020 07:19:24 GMT
- 조건부 요청 헤더
- If-Match, If-None-Match: ETag 값 사용
- If-Modified-Since, If-Unmodified-Since: Last-Modified 값 사용
프록시 캐시에 대해서 보면
한국에 있는 여러 클라이언트에서 미국에 있는 원 서버로 갈려면 엄청 오래 걸린다.
한국 어딘가에 프록시 캐시 서버를 거쳐서 가게 해보자. 응답 속도가 굉장히 빠르다.
유튜브에서 개발 컨텐츠 같은 사람들이 잘 안보는걸 보면 유튜브 다운로드가 엄청 느리다.
사람들이 많이 보는 컨텐츠를 다운받으면 로딩속도가 엄청 빠르다. 즉 한국 어딘가에 있는 서버에서 다운로드 받는 것이다.(CDN Service)
Cache-Control
캐시 지시어(directives) - 기타
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
- Pragma: no-cache
- HTTP 1.0 하위 호환
Cache-Control
캐시 지시어(directives) - 확실한 캐시 무효화
Cache - Control: no-cache
- 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용
Cache-Control: no-store
- 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제)
Cache-Control: must-revalidate
- 캐시 만료후 최초 조회시 원 서버에 검증해야함
- 원 서버 접근 실패시 반드시 오류가 발생해야함 - 504(Gateway Timeout)
- must-revalidate는 캐시 유효 시간이라면 캐시를 사용함
Pragma: no-cache
- HTTP 1.0 하위 호환
최초의 요청응답과정을 했을 때 브라우저 캐시가 no-cache 즉 http 응답코드에 no-cache가 있었다.
그리고 원 서버에서 검증을 하고 ok 쓸 수 있구나하고 응답을 하게 되는 것이다.
no-cache로 보냈는데 캐시서버가 no-cache네 하고 원 서버에 데이터를 보내야 하는데
순간적으로 네트워크에 단절이 생긴다.
빈번한 경우인데 이러면 프록시 캐시서버가 장애가 나는거보다는 오래된 데이터라도 보야주자 하고 200 ok로 응답을 보내주게 된다.
그런데 must-revalidate는 무엇이냐?
캐시 서버 요청을 웹브라우저에서 보내면 프록시 캐시가 네트워크 단절시에 항상 오류가 발생되게 504 상태코드를 보여준다.
그래서 서버 쪽에서 HTTP 응답코드를 만들 때
Cache-Control을 기억하자!
- no - cache
- no - store
- must - revalidate
하위 까지 생각해서
Pragma: no-cache
- HTTP 1.0 하위 호환도 기억해주자.
<출처 김영한: 모든 개발자를 위한 HTTP 웹 기본 지식 >
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com
'HTTP' 카테고리의 다른 글
Network (0) | 2022.12.19 |
---|---|
캐시 기본 동작 & 검증 헤더와 조건부 요청 (0) | 2022.04.30 |
인증 & 쿠키 (0) | 2022.04.30 |
전송 방식 & 정보(일반 정보 and 특별한 정보) (0) | 2022.04.30 |
HTTP 헤더 개요 & 표현 및 컨텐츠 협상 (0) | 2022.04.30 |