티스토리 뷰

ASAC/정리용

[03-01] HTTP Cache 동작

hee-ya07 2024. 12. 18. 15:13

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 부정 응답)
  • 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 부정 응답)

1.2 Cache-control 헤더 사용 방법

: 서버가 데이터의 통제권을 갖고 있기 때문에 서버에서 정책을 정함

  1. 캐시 저장 여부
    - no-store: 캐시 X
    - no-cache: 캐시 O, 단 매번 재검증 후 사용(-> 패킷의 경량화 목적)

  2. 캐시 저장 장소
    - public: private(WB) + shared(Proxy)
    - private: Only private(WB)

  3. 캐시 재점증 주기
    - max-age: Expires(유효 시간)-> 만약 기존의 값이 있다면 덮어 쓴다.
        => max-age = 0 === no-cache : 항상 검사, 하지만 캐시는 사용
    - s-maxage: proxy에 적용되는 유효기간

  4. 재검증 필수 여부
    - 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함