프로그래밍/http

[ http ] 12. 캐시 무효화

Yanoo 2021. 12. 11. 08:28
728x90
반응형

캐시 무효화

Cashe-Control

확실한 캐시 무효화 응답

캐시를 적용 안하면 캐시가 안되는 것이 아니라 웹 브라우저들이 임의로 캐시를 하는 경우가 있다.

그래서 확실하게 캐시를 안하는 방법은

  • Cache-Control: no-cache, no-store, must-revalidate
  • Pragma: no-cache
    • HTTP 1.0 하위 호환

이러한 것들을 다 넣으면 된다.

 

캐시 지시어(directives) - 확실한 캐시 무효화

  • Cache-Control: no-cache
    • 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의!)
  • Cache-Control: no-store
    • 데이터에 민감한 정보가 있으므로 저장하면 안됨(메모리에서 사용하고 최대한 빨리 삭제)
  • Cache-Control: must-revalidate
    • 캐시 만료 후 최초 조회시 원 서버에 검증해야 함
    • 원 서버 접근 실패 시 반드시 오류가 발생해야 함 - 504(Gateway Timeout)
    • must-revalidate는 캐시 유효 시간이라면 캐시를 사용함
  • Pragma: no-cache
    • HTTP 1.0 하위 호환

 

no-cache vs must-revalidate

no-cache 기본 동작

그림 그대로 프록시 캐시 서버에 먼저 요청하고 no-cache는 원 서버에 검증 받아야 하므로 프록시 캐시 서버는 이 요청을 원 서버에 넘기게 된다. 그리고 검증이 끝나면 검증 결과에 따른 응답을 보내게 된다.

 

must-revlidate를 설명하기 위해서 no-cache인 상태에서 아래의 경우라면 어떻게 될까?

원 서버의 네트워트가 단절된다면 캐시 서버 설정에 따라서 Error를 보낼 수 있고 200 OK도 보낼 수 있다.

 


must-revalidate

하지만 must-revalidate같은 경우는 무조건 504 Gateway Timeout 에러를 발생 시켜야 한다.

728x90
반응형