탐구개발
Cache-Control 헤더값 본문
Cache-Control 헤더는 웹 서버 또는 클라이언트가 웹 리소스의 캐싱 동작을 제어하기 위해 사용되는 HTTP 헤더입니다. 이 헤더는 웹 브라우저와 웹 서버 사이의 통신에서 캐싱 동작을 조정하여 웹 페이지의 성능과 성능 개선을 위해 사용됩니다.
사용되는 지시자로 public, no-store, max-age, must-revalidate가 있습니다.
이 지시자들을 분류해서 정리해보았습니다.
Cache-Control 예시
Cache-Control: no-cache, must-revalidate
Cache-Control: no-store
Cache-Control: public, max-age=3600
응답헤더값
공유 캐시 / 개인 캐시 여부
- public : 같은 컴퓨터를 사용하는 복수의 사용자간 캐시 재사용을 허가한다.
- private : 같은 컴퓨터를 사용하는 다른 사용자 간 캐시를 재사용하지 않는다.
캐시 저장 여부
- no-store : 캐시하지 않는다.
캐시 저장하지만 신선도 확인
- no-cache : 캐시가 유효한지 매번 문의해라. max-age=0과 같다.
- max-age : 캐시 신선도 초단위 설정. 유효하면 서버에 문의하지 않고 캐시 리턴, 유효하지 않으면 서버에 문의하고 304 Not Modified가 반환됐을 때만 캐시 리턴. 데이터가 업데이트 되었다면 서버로부터 받은 새 데이터 리턴.
- s-maxage : max-age와 같지만 공유캐시에 대한 설정값
프록시 관련
- no-transform : 프록시가 컨텐츠를 변형하지 않도록 프록시에 요청한다.
- must-revalidate : no-cache와 비슷하지만 프록시 서버에 보내는 지시가 된다. 프록시 서버가 서버에 문의했을 때 서버의 응답이 없으면, 프록시 서버가 클라이언트에 504 gateway timeout이 반환되기를 기대한다.
- proxy-revalidate : must-revalidate와 같지만, 공유캐시에 대한 설정값
요청헤더값
캐시 삭제
- no-store : 프록시 서버에 캐시를 삭제해라
신선도 확인
- no-cache : 응답과 동일
- max-age : 응답과 동일
신선도와 별개로 캐시 데이터를 사용
- max-stale : max-age값이 지났어도 클라이언트는 지정한 시간 동안은 저장된 캐시를 재사용하라고 프록시에 요청한다. 연장 시간은 생략할 수 있고, 그런 경우 영원히 유효하다는 의미가 된다. 만료된 캐시데이터라도 보내달라는 의미...
- min-fresh : 캐시의 수명이 지정된 시간 이상 남아있을 때, 캐시를 보내도 좋다고 프록시에 요청한다. 즉 적어도 지정된 시간만큼은 신선해야 한다.
- only-if-cached : 캐시된 경우에만 응답을 반환하고, 캐시된 콘텐츠가 없을 땐 504 Gateway Timeout 오류 메시지를 반환하도록 프록시에 요청한다. 이 헤더가 설정되면 처음을 제외하고 오리진 서버에 전혀 액세스하지 않는다.
(이 값들은 왜 쓰는걸까요...?)- max-stale과 only-if-cached의 차이는 캐시가 없을 경우의 동작 차이
프록시 관련
- no-transform : 프록시가 컨텐츠를 변형하지 않도록 프록시에 요청한다.
기타 Cache-Control 관련 헤더
Last-modified
- 특정날짜로 지정
- Etag (리소스 변경 여부를 ID로 관리하며, 강한 Etag와 약한 Etag로 분류된다)가 같이 있을 경우, Etag가 우선순위가 높다
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
ETag: "686897696a7c876b7e"
Expired
- 특정날짜로 지정
- Cache-control : max-age는 초단위로 지정되며, Cache-control : max-age가 우선순위가 높다
Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma : no-cache
- HTTP 1.1이전에 사용하던 헤더로 HTTP 1.1에서는 Cache-Control 헤더로 대체
- 클라이언트에서 프록시 서버에 캐시요청방식에 대해 지시하는 헤더
- '요청한 콘텐츠가 이미 저장돼 있어도, 원래 서버에서 가져오라'
- 클라이언트가 정보의 수명과 품질을 일일이 관리하는 상태는 부자연스럽기 때문에 사용하지 않음
'HTTP' 카테고리의 다른 글
Content-Security-Policy 헤더값 (1) | 2023.11.08 |
---|---|
CORS (교차 출처 리소스 공유) (0) | 2023.11.08 |
HTTPS(TLS) 통신 과정 (1) | 2023.11.08 |
Referer 헤더값 (0) | 2023.11.08 |
상태코드 301, 302, 303, 307, 308의 차이점 (0) | 2023.11.08 |