Cache 관련 헤더 정리

twid_yuni·2023년 12월 13일
1

Cache-Control


  • max-age: 캐시 유효 시간 (초 단위)

    • 유효시간 내에 동일한 요청이 발생한 경우 브라우저의 캐시를 이용한다.
  • no-store: 데이터는 캐시해도 되나, 원서버에 항상 검증 후 사용

  • no-cache: 데이터를 캐시하면 안됨.



검증 헤더 + 조건부 요청 헤더


max-age를 이용해 캐시 유효시간을 지정한 경우 유효기간이 지나면 원서버로 요청을 보낸다.

이 때 요청에 아무런 헤더를 포함하지 않으면 데이터가 변경되지 않아도 응답 바디에 데이터를 넣어서 보낸다.

검증 헤더와 조건부 요청 헤더를 사용하면 이러한 오버헤드를 줄일 수 있다.

검증 헤더

  • 서버에서 데이터가 변경되었는지 검증할 때 쓰이는 헤더

  • Last-Modified, ETag

조건부 요청 헤더

  • 서버에서 응답 바디에 포함할 조건을 지시하는 헤더

  • If-Modified-Since, If-Not-Match

Last-Modified + If-Modified-Since

콘텐츠 변경이 언제 이루어졌는지에 따라 body에 데이터를 담을지 결정된다.

  1. 클라이언트가 서버에게 GET 요청을 보낸다.

  2. 서버가 클라이언트에게 Last-Modified 헤더와 함께 body에 데이터를 담아 보낸다.

  3. 클라이언트가 1과 동일한 요청을 헤더에 If-Modified-Since 헤더와 함께 보낸다.
    If-Modified: [2에서 받은 Last-Modified 값]

  4. 서버는 콘텐츠가 변경 여부에 따라 다른 응답을 보낸다.(변경 일자를 기준으로 파악)

    • 변경 X: 상태코드-304 Not Modified / body-데이터 X
    • 변경 O: 상태코드-200 OK / body-데이터 O


ETag + If-Not-Match

  • 콘텐츠 내용 변경 여부에 따라 body에 데이터를 담을지 결정된다.

  • ETag는 Entity Tag로 콘텐츠를 식별할 수 있는 특수한 문자열이다.
    콘텐츠의 해시값, 수정된 타임스탬프의 해시 등을 사용한다.

  1. 클라이언트가 서버에게 GET 요청을 보낸다.

  2. 서버가 클라이언트에게 ETag 헤더와 함께 body에 데이터를 담아 보낸다.

  3. 클라이언트가 1과 동일한 요청을 헤더에 If-Not-Match 헤더와 함께 보낸다.
    If-Not-Match: [2에서 받은 ETag 값]

  4. 서버는 컨텐츠가 변경 여부에 따라 다른 응답을 보낸다.(변경 일자를 기준으로 파악)
    변경 X: 상태코드-304 Not Modified / body-데이터 X
    변경 O: 상태코드-200 OK / body-데이터 O

profile
항상 새로운 것을 좋아하는 도파민 중독 개발자

0개의 댓글