1. 캐시 제어 헤더
클라이언트와 서버가 어떻게 캐시를 관리할 것인지를 정의한다.
1) Cache-Control
- max-age=<seconds>: 리소스를 캐시할 수 있는 최대 시간을 초 단위로 지정한다.
- no-cache: 데이터는 캐시해도 되지만, 캐시된 복사본을 사용하기 전에 원서버(origin)에 검증을 요청한다.
- no-store: 데이터에 민감한 정보가 있으므로 저장하면 안됨. 캐시하지 않는다.
- public: 응답이 공개 캐시에 의해 저장될 수 있음.
- private: 응답이 사용자의 브라우저 캐시에만 저장되어야 함.
- must-revalidate: 캐시가 만료된 후, 사용하기 전에 반드시 원서버(origin)로부터 검증을 받아야 함.
* 참고
public과 private 지시어는 캐시 데이터가 어디에 저장되어야 하는지 구분하기 위해 사용된다.
💡프록시 캐시 서버란?
✔️ 프록시 캐시 서버는 클라이언트(예: 웹 브라우저)와 원 서버 사이에 위치하여 HTTP 요청을 중계한다.
✔️ 응답 데이터를 임시로 저장하는 서버.
✔️ 데이터 로딩 시간을 줄이고, 네트워크 트래픽을 감소시키며, 원 서버의 부하를 경감시키는 역할을 한다.
🤔no-cache는 항상 원서버에 검증을 요청하는데 must-revalidate가 왜 필요할까?
두 지시어 모두 데이터가 최신 상태인지 확인하는 지시어다.
원서버 검증이 어려운 상황에서 must-revalidate가 데이터 신뢰성 유지에 더 좋다.
왜냐하면, no-cache는 오래된 데이터를 보여줄 수 있기 때문이다.
만약 금융 거래처럼 최신의 정확한 데이터가 중요한 경우는 오래된 데이터보다 응답 오류를 보내는 것이 사용자에게 일관된 정보를 제공할 수 있다.
✅Cache-Control 예시
HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 1452
Cache-Control: max-age=86400, no-cache, no-store
2) Pragma (하위 호환)
지금은 거의 사용하지 않지만 HTTP/1.0과의 호환성을 위해 사용할 때가 있다.
'Pragma: no-cache'로 저장된 데이터를 사용하지 않고 서버로 부터 직접 데이터를 받길 요구할 때 사용된다.
3) Expires (하위 호환)
캐시 만료일을 정확한 날짜로 지정한다.
✅ Expires 예시
HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 1452
Expires: Wed, 21 Oct 2021 07:28:00 GMT
2. 캐시 무효화
확실하게 캐시를 무효화 해야 할 때는 아래 지시어를 모두 사용하면 된다.
Cache-Control : no-cache, no-store, must-revalidate
Pragma:no-cache
🤔그럼, 확실하게 캐시를 무효화 해야 할 때는 언제 일까?
▪️ 민감한 데이터 업데이트
ex) 사용자의 개인 정보, 금융 정보
▪️ 항상 최신 상태를 유지해야하는 실시간 데이터
ex) 주식 시세, 뉴스 피드
▪️ 로그인 상태 변경
: 사용자가 로그아웃하거나 다른 계정으로 로그인할 때, 이전 사용자 세션 정보가 남아있으면 안된다.
▪️ 법적, 규제 요건 변경
: 특정 콘텐츠를 더 이상 제공하지 않아야 할 때, 캐시에서 즉시 제거
▪️ 버그 수정 후 소프트웨어 업데이트
: 새 버전 배포 후에는 오래된 버전 캐시 자원이 사용되는 것을 방지 해야한다.
'인프런 김영한 강의 정리 > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
HTTP - 헤더(2) | 검증 헤더와 조건부 요청 (0) | 2024.05.15 |
---|---|
HTTP - 헤더(1) (0) | 2024.05.15 |
HTTP - HTTP 상태코드 (0) | 2024.05.10 |
HTTP - HTTP 메서드의 활용 및 API 설계 (0) | 2024.05.10 |
HTTP - HTTP 메서드의 속성 (0) | 2024.05.10 |