캐시 제어 헤더는 다음과 같이 존재한다
- 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 |
댓글