HTTP 웹 지식

HTTP 헤더2 - 캐시와 조건부 요청(캐시 무효화)

귀요미찰쓰 2022. 1. 28. 14:13
728x90
반응형

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

 

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

- Pragma: no-cache

      - HTTP 1.0 하위 호환

 

 

만약 이 페이지가 캐시가 되면 안된다 하시면 위에 것을 넣어주시면 됩니다.

확실히 캐시를 우회하려면, Cache-Control: no-cache, no-store, must-revalidate를 넣어주셔야합니다.

그 다음에 HTTP 1.0에서 혹시 뭔 요청이 온다면 Pragma: no-cache를 넣어주시면 됩니다.

예) 사용자의 통장 장고

 

 

Cache-Control 캐시 지시어(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는 예를 들어서 ETag 같은걸로 문구를 들어가게하죠. 그러면 프록시 캐시 서버로 갑니다. 프록시 캐시에서 no-cache가 왔으니 내가 처리하면 안되네 이러고 원 서버에 요청합니다. 그러면 원 서버가 검증을 하겠죠.

 

 

그리고 이제 정상적으로 응답을 해줍니다.

 

일단 아까전처럼 no-cache로 보냈어요. 그러면 프록시 캐시 서버가 이거 no-cache네 그러면 원 서버에 요청을 보내야겠죠. 그런데 만약에, 순간적으로 네트워크가 단절이 되어서 원 서버에 접근이 불가가 되었습니다. 그럴 때는, 장애가 나더라도 예전 상태라도 보여주자 이렇게 설정을 할 수 있는데 이게 no-cache의 정책입니다.

 

그런데 must-revalidate는 뭐냐면 위에 있는 옵션이 들어가면, 프록시 캐시에 들어와요. 그런데 프록시 캐시가 이거 내가 처리하면 안되네 다른 서버에 보내려는데 순간 네트워크가 단절이 되어서 원 서버에 접근이 불가능해요 이 경우에는 504 Gateway Timeout을 내보냅니다.

반응형

 

반응형