티스토리 뷰
1. HTTP Cache 동작 원리
- 캐시는 임시적인 저장이므로 실시간성 X, 하지만 준실시간성을 보장하고자 함
- 재검증은 "주기"와 "기준"으로 판단
1.1 HTTP Cache 재검증 기준
Last-Modified (수정일) | 낮은 정확도 - 텍스트 파일 수정 후, 다시 원상복구한 경우 수정일만 변경 |
검사 방법 - If-Modified-Since : 바뀌었어? - If-Unmodified-Since : 안바뀌었어? |
|
ETag (고유값) | 높은 정확도 - but, HTTP 1.0 혹은 1.1 호환성을 위해 위와 함께 사용 |
검사 방법 - If-None-Match : 바뀌었어? - If-Match : 안바뀌었어? |
- Last-Modified
: 마지막 수정일(시간) 기반으로 캐시의 유효성 판단
: 웹 서버가 Last-Modified 헤더 응답이라면, 재검증 시 아래의 헤더를 전달해야 함- 캐시 소유자의 요청: If-Modified-Since (바뀌었어?) (GET, HEAD)
1. 서버 답변 : 응 (바뀌었어) : 200 Resource Cache + 새 응답(새로운 캐시)
2. 서버 답변 : 아니 (안바뀌었어) : 304 Not Changed - 캐시 소유자의 요청: If-Unmodified-Since (안바뀌었어?) (POST 서버 상태 변경 Method)
1. 서버 답변 : 응 (안바뀌었어) : 2XX 성공 응답 (200 OK, 204 No Content, 206 Partial Content 등)
2. 서버 답변 : 아니 (바뀌었어) : 412 Precondition Failed (조건부 요청에 대한 False 부정 응답)
- 캐시 소유자의 요청: If-Modified-Since (바뀌었어?) (GET, HEAD)
- ETag
: 고유값(해시) 기반
: 웹 서버가 ETag 헤더 응답이라면, 재검증 시 아래의 헤더를 전달해야 함- 캐시 소유자의 요청: If-None-Match (달라? = 바뀌었어?)
1. 서버 답변 : 응 (바뀌었어) : 200 Resource Cache + 새 응답(새로운 캐시)
2. 서버 답변 : 아니 (안바뀌었어) : 304 Not Changed (GET, HEAD)
=> 412 Precondition Failed (POST 서버 상태 변경 Method) - 캐시 소유자의 요청: If-Match (같아? = 안바뀌었어?)
1. 서버 답변 : 응 (안바뀌었어) : 2XX 성공 응답 (200 OK, 204 No Content, 206 Partial Content 등)
2. 서버 답변 : 아니 (바뀌었어) : 412 Precondition Failed (조건부 요청에 대한 False 부정 응답)
- 캐시 소유자의 요청: If-None-Match (달라? = 바뀌었어?)
1.2 Cache-control 헤더 사용 방법
: 서버가 데이터의 통제권을 갖고 있기 때문에 서버에서 정책을 정함
- 캐시 저장 여부
- no-store: 캐시 X
- no-cache: 캐시 O, 단 매번 재검증 후 사용(-> 패킷의 경량화 목적) - 캐시 저장 장소
- public: private(WB) + shared(Proxy)
- private: Only private(WB) - 캐시 재점증 주기
- max-age: Expires(유효 시간)-> 만약 기존의 값이 있다면 덮어 쓴다.
=> max-age = 0 === no-cache : 항상 검사, 하지만 캐시는 사용
- s-maxage: proxy에 적용되는 유효기간 - 재검증 필수 여부
- must-revalidate: 무조건 재검증 후에 사용(서버가 닫혀있을 경우 504에러)
- proxy-revalidate: proxy캐시에 적용되는 must-revalidate 옵션
- SWR(Stale-While-Revalidate)
: 캐시의 즉시성 + 최신성
: HTTP Cache 제어 중 SWR (stale-while-revalidate) 확장 디렉티브 전략
- 현재 캐싱된 컨텐츠를 즉시 로드(Stale 이더라도)
- 미래 업데이트된 캐싱 컨텐츠가 사용될 수 있도록 보장(최신성)
- Ex) 60초 이내에 요청이 오는 경우 (stale-while-revalidate = 60)
=>재검증 요청을 동시에 하면서 오래된 캐시(Stale) 를 반환한다.
=> 처음 캐싱된 값은 stale....
깨알 사전
* Hash
: 객체의 대명사로 이해하면 편하다.
: 객체 안의 값이 바뀌면 해시또한 왕창 바뀐다.(쇄도/산사태 효과)
* HMAC(Hash-based Message-Authentication Code)
: 고유값 검증을 위해 Hash를 사용
: 다운 받은 파일의 변조 or API를 통해 받은 결과 값의 변조에 대한 확인을 위해
: 파일 or API 결과와 그 hash값을 함께 받음 -> 공유된 hash 키값을 통해 hash 생성 및 비교
* 412 Precondition Failed
: 리소스에 대한 엑세스 거부(조건 충족 X)
'ASAC > 정리용' 카테고리의 다른 글
[04-01] Cookie (1) | 2024.12.20 |
---|---|
[03-01] Proxy (0) | 2024.12.18 |
[03-01] HTTP Cache (1) | 2024.12.18 |
[02-02] 서버의 구성과 트래픽 (1) | 2024.12.18 |
[02-02] 운영체제 기초 (0) | 2024.12.17 |