스프링/HTTP 기본 지식

HTTP(7) - HTTP 헤더 (캐시 제어 헤더, 프록시 캐시, 캐시 무효화)

chanhee01 2023. 2. 7. 14:16

캐시 제어 헤더

 

1. Cache-Control : 캐시 제어

2. Pragma : 캐시 제어(하위 호환)

3. Expires : 캐시 유효 기간(하위 호환)

 

1. Cache-Control

Cache-Control: max-age

- 캐시 유효시간, 초 단위

Cache-Control: no-cache

- 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용 (if-none-modified 등을 통해 항상 검증을 먼저 해야함)

Cache-Control: no-store

- 데이터에 민감함 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제)

 

2. Pragma

Pragma: no-cache처럼 사용하는데 거의 사용하지 않음

 

3. Expires

expires: Mon, 01 Jan 1990 00:00:00 GMT

 

- 캐시 만료일을 정확한 날짜로 지정

- 하지만 초단위로 계산하는 Cache-Control: max-age를 권장해서 지금은 Expires를 거의 사용하지 않음

 

 

프록시 캐시

 

원 서버 직접 접근 - 미국의 원 서버를 직접 접근하려면 너무 오랜 시간이 걸린다

 

프록시 캐시 도입

한국 어딘가에 프록시 캐시 서버를 넣어놓고 미국에 있는 원 서버에 직접 접근이 아니라 프록시 캐시 서버를 통해 접근하도록 한다.

 

캐시를 만드는데 개인 웹 브라우저가 아니라 한국이 공통으로 사용하는 public한 공통 캐시를 만들어서 거기에 접근하도록 한다.

 

캐시 지시어

Cache-Control: public

- 응답이 public 캐시에 저장되어도 됨

Cache-Control: private

- 응답이 해당 사용자만을 위한 것임, private 캐시에 저장해야 함

Cache-Control: s-maxage

- 프록시 캐시에만 적용되는 max-age

 

 

캐시 무효화

 

Cache-Control : 확실한 캐시 무효화 응답

캐시 요청을 안해도 웹 브라우저가 임의로 캐시를 해버릴 수도 있다.

 

캐시를 하면 안되는 페이지가 있으면

Cache-Control: no-cache, no-store, must-revalidate를 넣어줘야한다.

 

1. Cache-Control: no-cache

- 데이터는 캐시해도 되지만 항상 원 서버에 검증하고 사용

 

2. Cache-Control: no-store

- 데이터에 민감한 정보가 있으므로 저장하지 말고 메모리에서 사용하고 최대한 빨리 삭제

 

3. Cache-Control: must-revalidate

- 캐시 만료후 최초 조회시 원 서버에 검증해야함

- 원 서버 접근 실패시 반드시 오류가 발생함 - 504(Gateway Timeout)