캐시(Cache) : 데이터나 값을 미리 복사해 놓는 임시 장소
캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나
값을 다시 계산하는 시간을 절약하고 싶은 경우 사용
응답 결과를 캐시에 max-age만큼 일시 저장
두 번째 요청부터는 캐시를 우선 조회합니다
캐시 적용 장점
검증 헤더 Last Modified
: 데이터가 마지막으로 수정된 시간 정보를 헤더에 포함
응답 결과를 캐시에 저장할 때 데이터 최종 수정일도 저장됨 ➡️ 캐시의 수정시간 알 수 있음
If-Modified-Since
: 캐시 유효시간이 초과되더라도 조건부 요청을 할 수 있는 헤더
Last Modified
, If-Modified-Since
304 Not Modified
+ 헤더 메타데이터만 응답 (바디 x)ETag
, IF-None-Match
앞서 설명한 Last Modified
, If-Modified-Since
보다 간단한 방식의 검증 헤더
ETag
: 서버에서 완전히 캐시 컨트롤하고 싶은 경우 사용
Chache-Control: max-age
: 캐시 유효시간, 초 단위Chache-Control: no-chach
: 데이터를 캐시해도 항상 orgin 서버에 검증하고 사용Chache-Control: no-store
: 데이터에 민감한 정보 있으므로 캐시 저장 xChache-Control: max-age
권장Chache-Control: max-age
와 함께 사용시 무시된다 프록시 : 클라이언트와 서버 사이 대리로 통신을 수행하는 것
프록시 서버 : 중계 기능을 하는 서버
클라이언트, 서버가 다른 네트워크에 간접적으로 접속할 수 있기 때문에 보안, 캐싱을 통한 성능, 트래픽 분산 장점 가진다
ex) 한국 클라이언트가 미국 서버에서 자료를 요청할 때 걸리는 시간이 0.5초라고 가정하면
클라이언트가 요청한 자료가 있을 시에 요청 응답에 0.1초가 걸리는 한국에 있는 프록시 캐시 서버를 도입한다면 여러 사람이 찾은 자료일수록 이미 캐시에 등록되어 있는 자료기 때문에 더 빠른 속도로 자료를 받을 수 있음
Cache-Control: public
: 응답이 public 캐시에 저장되어도 됨Cache-Control: private
: 응답이 해당 사용자만을 위한 것, private 캐시에만 저장 (기본값)Cache-Control: s-maxage
: 프록시 캐시에만 적용되는 max-age(캐시 수명)Age:60
(HTTP 헤더) : 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간Cache-Control: no-cache
: 데이터 캐시해도 되지만, 항상 원 서버에 검증하고 사용 (이름 주의)Cache-Control: no-store
: 데이터에 민감한 정보 포함, 저장 xCache-Control: must-revaildate
: 캐시 만료 후 최초 조회 시 원 서버에 검증확실한 캐시 무효와 응답시
Cache-Control: no-cache, no-store, must-revaildate
Pragma: no-cache
no-cahce
must-revauldate
no-cahce
와 같이 예전 데이터로 뜬다면 큰 문제 생김