캐시 제어 헤더(Cache Control Headers)
웹 캐시가 캐시된 리소스를 어떻게 처리할지를 지정하는 HTTP 헤더이다. 이 헤더는 웹 캐시가 HTTP 요청 및 응답을 처리할 때 사용된다.
Cache-Control 캐시 지시어(directives)
Cache-Control은 HTTP 헤더 중 하나로, 캐시 제어에 사용된다. 이 헤더는 캐시에 대한 지시어(directives)를 제공하여 캐시의 동작을 제어한다.
• Cache-Control : max-age
캐시의 유효 시간을 초 단위로 설정하며. 이를 통해 캐시된 데이터가 언제까지 유효한지 설정할 수 있다.
• Cache-Control : no-cache
데이터를 캐시해도 되지만, 항상 원 서버에 검증하고 사용해야 한다는 것을 나타내며. 이를 통해 캐시된 데이터가 업데이트된 경우에도 항상 최신 데이터를 사용할 수 있다.
• Cache-Control : no-store
데이터에 민감한 정보가 있으므로 캐시에 저장하지 말아야 한다는 것을 나타낸다. 이 경우 데이터는 메모리에서 사용하고 최대한 빨리 삭제되도록 구성해야 한다.
Pragma(캐시 하위호환)
HTTP 1.0에서는 Cache-Control 헤더가 도입되기 전에 Pragma 헤더를 사용하여 캐시 제어를 했다.
• Pragma : no-cache
Pragma 헤더의 값으로 no-cache를 설정하면 캐시 서버는 항상 원본 서버에게 데이터 유효성을 검증하도록 요청하게 된다. 이 기능은 HTTP 1.1에서 Cache-Control: no-cache와 동일하게 동작하지만, HTTP 1.0에서만 사용 가능하므로
지금은 거의 사용하지 않지만, HTTP 1.0 하위 호환성을 위해 사용되기도 한다.
Expires 캐시 만료일 지정(하위 호환)
HTTP 1.0에서는 캐시 만료일을 지정하기 위해 Expires 헤더를 사용하였다. 이 헤더는 캐시된 데이터의 만료일을 정확한 날짜와 시간으로 지정하여 캐시 서버가 캐시된 데이터를 언제까지 사용할 수 있는지를 결정한다.
• expires: Mon, 01 Jan 1990 00:00:00 GMT
Expires 헤더는 정확한 날짜를 사용하기 때문에, 캐시 서버와 클라이언트 간의 시간 차이가 있을 경우 캐시 유효기간을 정확히 계산하기 어렵다. 또한, 만료일을 지정한 후 서버에서 캐시 제어를 변경하면 클라이언트에서 새로고침을 하지 않는 이상 해당 데이터는 계속 사용된.
따라서 지금은 더 유연한 Cache-Control: max-age를 권장한다. 만약 Expires 헤더와 Cache-Control: max-age를 함께 사용한다면, Cache-Control: max-age가 우선 적용된다.
이러한 이유로, Expires 헤더는 HTTP 1.0 하위 호환성을 위해 사용되기도 한다.
원 서버, 프록시 캐시서버
오리진 서버(Origin Server)는
인터넷에서 클라이언트가 요청하는 원본 서버를 의미한다. 예를 들어, 사용자가 웹 브라우저를 통해 웹 페이지를 요청할 때, 해당 웹 페이지가 위치한 서버가 오리진 서버가 된다.
프록시 캐시(Proxy Cache)는
클라이언트와 오리진 서버 사이에서 중개자 역할을 수행하는 서버이다. 클라이언트가 오리진 서버에 요청을 보내면, 프록시 서버는 해당 요청을 대신 받아서 오리진 서버에 전달한다. 그리고 오리진 서버로부터 받은 응답을 클라이언트에게 전달하기 전에 프록시 캐시에 저장하게된다. 이후 같은 요청이 들어올 경우, 프록시 캐시에서 먼저 응답을 찾아서 클라이언트에게 전달하게 된다. 이렇게 함으로써 오리진 서버의 부하를 줄이고, 더 빠른 응답 속도를 제공할 수 있다.
또한, 프록시 캐시는 콘텐츠 필터링, 보안 기능, 로드 밸런싱 등의 기능을 수행할 수도 있다.
Cache-Control 캐시 지시어(directives) - 기타
• Cache-Control : public
응답이 public 캐시에 저장될 수 있음을 나타냄
• Cache-Control : private
응답이 특정 사용자를 위한 것임을 나타내며, 해당 사용자만을 위한 private 캐시에 저장되어야 함을 나타낸다.
• s-maxage
프록시 캐시에만 적용되는 max-age를 지정하는 지시어이다. 이를 사용하면, 프록시 캐시에서 캐시된 콘텐츠를 일정 기간동안 유지할 수 있다.
• Age
오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초)을 지정하는 HTTP 응답 헤더이다. 이를 사용하면, 프록시 캐시에서 캐시된 콘텐츠의 유효 기간을 계산할 수 있다.
💡따라서, 오리진 서버와 프록시 캐시 간의 적절한 캐시 제어를 위해서는 Cache-Control 지시어들을 적절히 활용하며, 이를 통해 웹 콘텐츠의 성능을 최적화하고, 네트워크 대역폭을 절약할 수 있다.
출처 : 인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 by 우아한형제 김영한이사님
'WEB HTTP > HTTP 기본' 카테고리의 다른 글
HTTP 헤더 - 캐시 무효화 (0) | 2023.03.22 |
---|---|
HTTP 헤더 - 검증과 조건부 요청 (0) | 2023.03.21 |
HTTP 헤더 - 캐시 기본동작 (0) | 2023.03.21 |
HTTP헤더 - 쿠키 Cookie,Set-Cookie (0) | 2023.03.21 |
HTTP헤더 - 일반정보, 특별한 정보, 인증 (0) | 2023.03.21 |