HTTP 웹 기본 지식 - 캐시 무효화
캐시 무효화
Cache-Control에 확실한 캐시 무효화를 할 수 있는 응답이 있다.
"캐시를 적용안하면 캐시가 안되는 것 아닌가요?"라고 궁굼할 수 있는데,
캐시를 적용하지 않아도 웹브라우저들이 ex)GET요청인 경우에 임의로 캐시를 해버리기도 한다.
그래서, "이 페이지는 정말 캐시가 되면 안돼!!"라면, ex) 현재 사용자의 통장잔고는 계속 갱신이 될 수 있으므로 캐시를 하면 안된다.
확실한 캐시 무효화 응답을 원한다면, 이것을 다 넣어줘야한다.
[확실한 캐시 무효화 응답]
- Cache-Control: no-cache, no-store, must-revalidate
- Pragma: no-cache
- HTTP 1.0 하위 호환
과거 브라우저에서도 요청이 올 수 있으므로, 위의 것들을 모두 넣어줘야 한다.
- Cache-Control: no-cache
- 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의!)
- Cache-Control: no-store
- 데이터에 민감한 정보가 있으므로 저장하면 안됨
(메모리에서 사용하고 최대한 빨리 삭제)
- 데이터에 민감한 정보가 있으므로 저장하면 안됨
- Cache-Control: must-revalidate
- 캐시 만료후 최초 조회시 원 서버에 검증해야함
- 원 서버 접근 실패시 반드시 오류가 발생해야함 - 504(Gateway Timeout)
- must-reavalidate는 캐시 유효 시간이라면 캐시를 사용함
- Pragma: no-cache
- HTTP 1.0 하위 호환
no-cache vs must-revalidate 가 왜 필요할까?
no-cache + ETag로 프록시 캐시로 갔다고 하자,
그러면 프록시 캐시 서버가 받아보니까, "어? no-cache네? 이건 내가 처리하면 안되는 거네?" 라고 하고선,
원서버에 요청한다.
그러면 원 서버가 검증을 해본다.
그리고나서 304응답을 해준다.
그러면 클라이언트는 해당 캐시를 그제서야 사용할 수 있을 것이다.
그런데 만약에, no-cache+ETag로 요청을 보내서,
프록시 캐시가 해당 요청을 보고 "no-cache네? 내가 처리못하는거네?" 라고하고선 원서버에 요청을 보내야하는데,
순간적으로 프록시 캐시서버와 원서버와의 네트워크가 단절되서 원서버에 접근이 불가하면? 어떻게 될까?
그러면, 이 프록시 캐시 서버에 "그래도 장애가 나는 것 보다는 옛날 데이터라도 보여주자!"라는 설정을 하는 경우가 있다.
그러면 Error가 아니라, 200OK로 할 수도 있다.
물론 왠만하면 원 서버에 요청을 하겠지만,
순간적으로 네트워크 단절이 되었을 때, 어떻게 할것인가? 에 대한 고민을 했을 때,
"옛날 데이터라도 보여주자"라고 판단해서 설정해놓았으면,
오류가아니라 200OK 라고 프록시 캐시 응답을 해버릴 수도 있다.
그런데, must-revalidate는 뭐냐면,
위와같이 순간 네트워크가 단절되어 원 서버 접근이 불가능 할 때,
항상 오류가 발생하여 504 Gateway Timeout이 발생하도록 설정하는 옵션이다.
예를 들면, 매우 중요한 돈과 관련된 것을 생각했을 때,
확실한 캐시 무효화를 하려면,
Cache-Control:no-cache, no-store, must-revalidate
Pragma: no-cache 를 작성해줘야 한다.
'HTTP' 카테고리의 다른 글
너 CORS 설정 해줬어? (Cross-Origin Resource Sharing) (0) | 2023.06.22 |
---|---|
HTTP 웹 기본 지식 - 프록시 캐시 (0) | 2022.06.22 |
HTTP 웹 기본 지식 - 캐시와 조건부 요청 헤더 (0) | 2022.06.22 |
HTTP 웹 기본 지식 - 검증 헤더와 조건부 요청2 (0) | 2022.06.22 |
HTTP 웹 기본 지식 - 검증 헤더와 조건부 요청1 (0) | 2022.06.22 |
댓글
이 글 공유하기
다른 글
-
너 CORS 설정 해줬어? (Cross-Origin Resource Sharing)
너 CORS 설정 해줬어? (Cross-Origin Resource Sharing)
2023.06.22 -
HTTP 웹 기본 지식 - 프록시 캐시
HTTP 웹 기본 지식 - 프록시 캐시
2022.06.22 -
HTTP 웹 기본 지식 - 캐시와 조건부 요청 헤더
HTTP 웹 기본 지식 - 캐시와 조건부 요청 헤더
2022.06.22 -
HTTP 웹 기본 지식 - 검증 헤더와 조건부 요청2
HTTP 웹 기본 지식 - 검증 헤더와 조건부 요청2
2022.06.22