본문 바로가기
CS 기본지식/HTTP

HTTP 헤더 - 캐시②(캐시 제어 헤더)

by YellowCow 2022. 8. 7.

캐시 제어 헤더는 다음과 같이 존재한다

  • Cache-Control: 캐시 제어
  • Pragma: 캐시 제어(하위 호환)
  • Expires: 캐시 유효 기간(하위 호환)

 

다음은 위 헤더의 상세설명이다

 

Cache-Control

- 캐시 지시어(directives)

  • Cache-Control: max-age
    • 캐시 유효시간(초 단위)
  • Cache-Control: no-cache
    • 캐시 가능하지만, 항상 원(Origin)서버에 검증하고 사용
  • Cache-Control: no-store
    • 데이터에 민감한 정보가 있으므로 저장하면 안됨
      (메모리에서 사용하고 최대한 빨리 삭제)

 

Pragma

- 캐시 제어(하위 호환)

  • Pragma: no-cache
  • 항상 원(Origin) 서버에 검증하고 사용하도록 함
  • HTTP 1.0 하위 호환
  • 현재 거의 사용 X
  • 구글 같이 전 세계 모든 브라우저를 지원해야 하는 경우
    Pragma를 사용 

 

Expires

  • 캐시 만료일을 정확한 날짜로 지정
  • HTTP 1.0 부터 사용(하위호환)
  • 지금은 더 유연한 Cache-Control: max-age 권장
  • Cache-Control: max-age와 함께 사용하면 Expires는 무시
  • 예) "expires: Mon, 01 Jan 1990 00:00:00 GMT"

 

프록시 캐시

다음은 프록시 캐시에 대한 제어헤더이다

 

프록시 캐시를 설명하기 전에

프록시 캐시를 쓰지 않으면 어떤 일이 발생하는지 알아보자

 

프록시 캐시를 사용하지 않는 경우

  • 클라이언트와 서버 사이에는 중간 통신장비들이 존재한다
  • 원 서버(Origin)와 거리가 멀 수록, 거처가는 통신장비의 수가 증가한다
  • 이로 인해 거리가 멀 수록, 통신하는데 드는 지연시간이 증가한다

 

프록시 캐시를 사용하는 경우

  • 첫 요청 때만 원서버에 요청을 보냄
  • 첫 요청에 대한 응답을 프록시 캐시 서버에 저장
  • 이후 요청에 대해서는 프록시 캐시 서버에 저장된 응답을 사용
  • 매번 원 서버에 요청하지 않아도 된다(통신 소요시간 감소)

 

프록시 캐시를 사용하면 매번 원 서버에 요청을 보내지 않고

중간에 있는 프록시 캐시 서버를 이용하여 응답을 받을 수 있다.

 

위 그림처럼,

프록시 캐시 서버를 사용하지 않을 경우, 원 서버까지 요청을 보내야 해서 총 500ms이 걸리는 반면,

프록시 캐시 서버를 사용 경우, 프로시 캐시 서버까지만 요청이 전달되면 되므로 100ms으로 기존 보다 적게 걸리는 것을 볼 수 있다

 

캐시 종류는 2가지가 존재한다

  • Private 캐시: Local 캐시
  • Public 캐시: 프록시 캐시

 

다음은  프록시 캐시와 관련된 캐시 헤더들이다

  • Cache-Control: public
    • 응답이 public 캐시에 저장되어도 됨
  • Cache-Control: private
    • 응답이 해당 사용자만을 위한 것임을 표현
    • Private 캐시에 저장해야함(default)
    • 예) 개인정보
  • Cache-Control: s-message
    • 프록시 캐시에만 적용되는 max-age
  • Age: 60 (HTTP 헤더)
    • 원(Origin) 서버에서 응답 후 프록시 캐시 내에 머문 시간(초)

 

캐시 무효화

캐시 무효화란, 캐시에 서버 응답을 저장하지 않는 것을 말한다.

 

예를 들어, 캐시 무효화는 다음과 같은 경우에 사용할 수 있다.

  • 개발 중 변경사항을 확인
  • 보안에 민감한 정보저장 X

 

캐시 무효화를 위한 헤더는 다음과 같다

  • Cache-Control: no-cache
    • 캐시가능하지만, 항상 원(Origin) 서버에 검증하고 사용
  • Cache-Control: no-store
    • 보안에 민감한 정보가 있으므로 저장하면 안 됨
      (메모리에 사용하고 최대한 빨리 삭제)
  • Cache-Control: must-revalidate
    • 캐시 유효기간 만료 후 최초 조회 시 원(Origin) 서버에 검증해야함
    • 원 서버 접근 실패시 반드시 오류가 발생해야 함 - 504(Gateway Timeout)
    • must-revalidate는 캐시 유효기간이 초과하지 않을 경우 캐시 사용
  • Pragma: no-cache
    • 항상 원(Origin) 서버에 검증하고 사용하도록 함
    • HTTP 1.0 하위 호환
    • 현재 거의 쓰지 않음

 

Cache-Control: no-cache, no-store, must-revalidate을 모두 사용해야 확실하게 캐시 무효화가 됨

 

 

no-cache, must-revalidate 비교

  • no-cache

  • must-revalidate

'CS 기본지식 > HTTP' 카테고리의 다른 글

HTTP 헤더 - 캐시①(캐시와 조건부 요청)  (0) 2022.08.07
HTTP 헤더 - 기본헤더  (0) 2022.08.02
HTTP Status Code  (0) 2022.07.27
HTTP Method 활용  (0) 2022.07.26
HTTP Method(REST API)  (0) 2022.07.25

댓글