일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- no cache
- 서블릿http세션
- supportParameter
- must revalidate
- HTTP API
- Not Modified
- gradle오류
- 프록시객체
- 조건부요청
- 프록시 캐시 서버
- 캐시
- 서블릿필터
- 검증헤더
- 쿠키보안문제
- 양쪽 모두 값 설정
- Expires
- etag
- UrlResource
- 300
- 쿠키생명주기
- 인증체크
- http
- 세션만들어보기
- www-Authenticate
- resolveArgument
- hikaricp
- max age
- Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMain
- 세션타임아웃설정
- HTTP상태코드
- Today
- Total
복습을 위한
캐시 무효화 본문
Cache-Control에는 확실하게 캐시 무효화 응답을 할 수 있는 것들이 있다.
어?캐시를 적용안하면 캐시안되는게 아닌가요? 할 수도 있는데 아니다. 캐시를 적용안해도 웹브라우저에서 Get요청인 경우 임의로 캐시를 해버리기도 한다. 그래서 정말 이 페이지는 캐시가 되면 안된다고 하면 위 헤더들을 넣어줘야한다. 통장잔고 이런 것들은 계속 갱신이 될 것이니 캐시를 하면 안될 것이다.
Pragma는 과거 브라우져에서 요청이 올 수도 있으므로 같이 확실히 넣어주는게 좋다.
no cache지시어는 조건부요청 검증헤더를 통해 항상 원서버에 검증하고 사용해야한다는 뜻이다.
no store지시어는 데이터에 민감한 정보가 있으므로 저장하면 안된다는 의미이다. 일단 이 두개를 조합해야하고
must-revalidate는 no cache와 비슷한데 '캐시 만료후 최초 조회시'라는 말이 덧붙는다. 좀 더 알아보자.
no cache를 먼저 보자면 요청에서 no cache는 Etag와 함께 프록시캐시서버로 간다. 프록시 캐시서버는 지시어가 no cache이기 때문에 본인이 처리하지않고 다시 원서버에 요청을 한다. 그럼 원서버에서 검증을 할 것이다.
웹 브라우저는 응답을 받고 캐시 데이터를 사용하게 된다.
근데 만약에 프록시 캐시 서버와 원서버사이에 네트워크 단절 때문에 원 서버에 접근 불가할 경우가 있을 것이다.
그래서 프록시서버에서는 그럴 때 오류를 내기 보다는 옛날 데이터라도 보여주는 설정을 하는 경우가 있다. 그래서 그냥 그 데이터로 200응답을 할 수도 있다.
그런데 만약 must revalidate지시어로 요청이 온 상황에서 똑같이 네트워크 단절로 프록시 서버에서 원서버로 접근이 불가할 때는 무조건 504Gateway Timeout을 나오도록하는게 http스펙에 적혀있다. 예를 들어 통장잔고 같은 데이터 정말 중요하지않은가? 이럴 때 원서버로 접근이 불가하다고 프록시 캐시에서 임의로 옛날 데이터를 보여주면 혼란을 야기할 것이다.
잘 발생하지않지만 맨 위 언급한 무효화 헤더들을 확실하게 넣어주는 것이 좋다. 모든 상황에 대비해서.
출처
'http헤더' 카테고리의 다른 글
프록시(Proxy)캐시 (0) | 2024.01.20 |
---|---|
캐시와 조건부 요청 헤더 정리 (0) | 2024.01.20 |
검증 헤더와 조건부 요청2 (1) | 2024.01.19 |
검증헤더와 조건부요청1 (0) | 2024.01.19 |
캐시 기본 동작 (0) | 2024.01.17 |