선릉역 1번 출구

cache: no-cache, no-store, must-revalidate 본문

Computer/Web

cache: no-cache, no-store, must-revalidate

choideu 2023. 11. 17. 16:23

http header의 Cache-Control의 필요성

  1. 대부분의 Client(앱, 웹 등등)는 Back-end와 HTTP을 통해 통신을 해서 데이터를 가져오고 사용자에게 UI를 제공함
    1. server와 client의 연동이라고 볼 수 있음
  2. Client로 보내는 데이터가 네트워크를 거치기 때문에 시간이 소요됨
  3. 이때, Client가 이전에 받은 데이터와 새로 요청한 데이터가 같다면 이 과정이 낭비일 수 있으므로 Cache-Control을 사용함
  4. Server는 부하를 줄이고(요청이 줄기 때문), Client는 네트워크를 거치는 시간을 아낄 수 있음

구조 상 client - cache server - server라면, 요청이 server까지 도달하지 않아도 cache server에서 가져올 수 있기 때문이고, 이미지나 JS 파일은 자주 변하지 않기 때문에 새로 다운로드 시 불필요한 리소스를 낭비하게 됨

  • private cache server: 웹 브라우저에 저장되는 캐시로 다른 사람이 접근할 수 없지만 서버 응답 內 Authorization 헤더가 포함되어 있다면 private cache에 저장되지 않음
  • public cache server(shared cache): 웹 브라우저와 서버 사이에서 동작하는 캐시를 의미함
    • Proxy cache: forward proxy에서 동작하는 캐시
    • Managed cache: AWS Cloudfront 혹은 Cloudflare와 같은 CDN 서비스나 리버스 프록시에서 동작하는 캐시
  • 포워드 프록시 vs 리버스 프록시
    • 포워드 프록시: 클라이언트와 인터넷 사이 위치해서 이로 인해 클라이언트의 정보가 서버측에 노출되지 않음
      • 캐싱
      • 특정 컨텐츠 액세스 제한
    • 리버스 프록시: 로드 밸런싱으로 많이 사용
      • 무중단 배포
      • DDoS 공격으로부터 보호(서버가 인터넷으로부터 숨겨지기 때문에 외부에서 서버의 IP 확인이 불가함)
      • 캐싱: 포워드 프록시와 동일하게 리버스 프록시도 캐싱 기능 수행이 가능함

그래서 Cache-Control이란?

- HTTP에서 캐시 메커니즘을 지정하기 위해 사용되는 헤더임

  • 캐시 유효기간 - max-age: 캐시의 최대 수명 설정 가능(초 단위)
  • 캐시 유효성 검증 및 조건부 요청(트래픽 낭비를 줄이기 위해 실제 원본 데이터가 수정 되었을 때만 리소스를 내려 받는 것이 바람직함)
    • 리소스의 마지막 갱신 시각으로 검증
      • Last-Modified / If-Modified-Since
    • 리소스의 식별자를 기준으로 검증
      • ETag/If-None-Match
  • 항상 최신 버전의 리소스만을 제공하고 싶을 경우
    • no-cache: 리소스에 대한 캐시를 생성하지만, 리소스 요청 시 원 서버에 항상 캐시 유효성 검증을 하는 옵션
    • no-store: 리소스에 대한 캐시를 생성하지 말라는 가장 강력한 Cache-Control 디렉티브(저장하면 안되는 민감 정보일 경우 사용)
    • must-revalidate: 캐시 관리자에게 내부 유효성 체크를 허용하지 않고, 항상 Server에 유효성 체크를 하도록 함

*캐시 무효화를 위해서는 no-store만으로도 캐시 무효화가 되어야 하는 것 아닌가?

=> HTTP 스펙이 모든 상황을 완벽하게 정의한 것이 아니기 때문에 조금 더 오래된 브라우저와의 호환성을 위해 no-cache나 must-revalidate를 같이 사용함

 

 

참고 사이트

https://www.blog-dreamus.com/post/cache-control-%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0

 

'Cache-Control'이 필요한 이유

앱의 성능을 향상시키는 방법 중 하나인 캐시. 클라이언트에서 캐쉬를 하고, 서버에서 컨트롤이 가능한 Cache-Control에 대해서 알아봅니다.

www.blog-dreamus.com

https://inpa.tistory.com/entry/HTTP-%F0%9F%8C%90-%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%9D%98-%EC%BA%90%EC%8B%9C-%EC%A0%84%EB%9E%B5-Cache-Headers-%EB%8B%A4%EB%A3%A8%EA%B8%B0#%EC%9B%B9%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%9D%98_%EC%BA%90%EC%8B%9C_%EA%B8%B0%EB%B3%B8_%EB%8F%99%EC%9E%91

 

🌐 웹 브라우저의 Cache 전략 & 헤더 다루기

웹브라우저의 캐시(Cache) 원리 컴퓨터 운영체제에서의 캐시(Cache)는 주기억장치에서 자주 사용하는 프로그램과 데이터를 하드디스크로부터 가져오는데 시간이 많이 걸리니 캐시 저장소에 임시

inpa.tistory.com

 

'Computer > Web' 카테고리의 다른 글

Apache 취약점 점검 스크립트 작성  (0) 2024.07.25
XML and JSON  (0) 2022.08.13
HTML table  (0) 2022.07.17
HTML 문서와 웹사이트 구조  (0) 2022.07.16
HTML 소개  (0) 2022.07.16
Comments