[네트워크] | HTTP 헤더 - 캐시 무효화

제롬·2022년 5월 10일
0

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

Cache-Control 을 사용해 캐시를 무효화하는 응답을 할 수 있다.

☑️ Cache-Control : no-cache

  • 데이터는 캐시해도 되지만 항상 origin 서버에 검증하고 사용한다.

☑️ Cache-Control : no-store

  • 데이터에 민감한 정보가 있어 저장하면 안될때 사용한다.
  • 메모리에서 사용하고 최대한 빨리 삭제한다.

☑️ Cache-Control : must-revalidate

  • 캐시 만료후 최초 조회시 원 서버에 검증해야 한다.
  • 원 서버 접근 실패시 반드시 504 Gateway Timeout 오류가 발생해야 한다.
  • 캐시 유효시간내에 있다면 캐시를 사용한다.

☑️ Pragma : no-cache

  • HTTP 1.0 하위호환용이다.

no-cache vs must-revalidate

클라이언트가 no-cache 상태로 서버에 데이터를 요청하면 프록시 서버는 no-cache 상태이므로 원 서버(origin 서버)에 요청을 전달한다.

원 서버는 요청에 맞는 응답을 반환한다.

만약, 프록시 캐시 서버가 원 서버에 요청을 보내야하는데 순간적으로 원(origin)서버와 네트워크가 단절되어 접근이 불가능하다면 오류를 보내기 보다는 오래된 데이터로 클라이언트에 응답을 반환한다.

하지만, 요청의 cache-control값이 must-revalidate라면 원(origin)서버에 접근이 불가능할 때 504 Gateway Timeout 에러를 발생시켜야 한다.

예컨대, 통장 잔고등 중요한 정보를 원(origin)서버에 문제가 생겼다고해서 이전 잔고를 반환하게하면 심각한 문제가 발생할 수 있다.

정리💡
확실하게 캐시 무효화 응답을 사용하려면 no-cache로 원(origin)서버에서 데이터를 검증하도록하고 must-revalidate를 사용해 원(origin)서버와 통신이 안되면 504 에러를 발생하도록 해야한다.
그리고 Pragma를 사용해서 HTTP 1.0이하 버전과의 하위호환도 적용해주면 된다.


[Reference]
김영한 - HTTP 웹 기본지식 강의
개발왕 도던 - 프록시 캐시

0개의 댓글