Cache-Control

  • 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- =revalidate는 캐시 유효 시간이라면 캐시를 사용함
  • Pragma : no-cache
    • HTTP 1.0 하위 호환

검증 헤더와 조건부 요청

검증헤더

  • 캐시 데이터와 서버데이터가 같은지 검증하는 데이터
  • Last-Modified, ETag

조건부 요청 헤더

  • 검증 헤더로 조건에 따른 분기
  • If-Modified-Since : Last-Modified 사용
  • If-None-Match : ETag 사용
  • 조건이 만족하면 200 OK
  • 조건이 만족하지 않으면 304 Not Modified

예시

  • 데이터 미변경시
    1. 캐시 : 2023년 4월 13일 15:00:00 / 서버 : 2023년 4월 13일 15:00:00
    2. 304 Not Modified => 헤더 데이터만 전송(Body 미포함)
    3. 전송 용량 헤더만!
  • 데이터 변경시
    1. 캐시 : 2023년 4월 13일 15:00:00 / 서버2023년 4월 13일 16:00:00
    2. 200 OK => 모든 데이터 전송(Body 포함)
    3. 전송 용량 헤더/바디!

검증 헤더와 조건부 요청의 단점

  • 1초 미만 단위로 캐시 조정이 불가능하다.
  • 날짜 기반의 로직을 사용한다.
  • 데이터를 수정해서 날짜가 다르지만, 같은 데이터를 수정해서 데이터 결과가 같은경우
    • 예) A => B => A
  • 서버에서 별도의 캐시 로직을 관리하고 싶은경우
    • 예) 스페이스나 주석처럼 크게 영향이 없는 변경에서 캐시를 유지하고 싶은 경우

ETag

  • 캐시용 데이터에 임의의 고유한 버전 이름을 달아둔다.
  • 예) ETag : "v1.0",ETag : "1234567890"
  • 데이터가 변경되면 이름을 변경함.
  • 예) ETag : "aaaaa" => "bbbbb"
  • 같으면 유지!  다르면 다시받기!

강의출처 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

캐시 미적용

캐시가 없을경우 1.1M의 JPG를 다운로드받는다.

두번째 요청시에도 동일하게 다운로드 받는다.

  • 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야한다.
  • 인터넷 네트워크는 매우 느리고 비싸다.
  • 브라우저 로딩 속도가 느리다.

캐시 적용

첫번째 요청시 응답결과를 캐시에 저장한다.

두번째 요청시 캐시에서 조회가가능하다.

  • 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다.
  • 비싼 네티워크 사용량을 줄일 수 있다.
  • 브라우저 로딩 속도가 매우 빠르다.

캐시 시간초과

  • 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고, 캐시를 갱신한다.
  • 캐시 유효 시간이 초과해서 서버에 다시 요청하면 두가지 상황이 나타난다.
    1. 서버에서 기존데이터를 변경함.
    2. 서버에서 기존데이터를 변경하지 않음.
  • 캐시 만료후에도 서버에서 데이터를 변경하지 않음.
  • 데이터를 전송하는 대신에 저장해 두었던 캐시를 재사용 할 수 있다.
  • 클라이언트의 데이터와 서버의 데이터가 같다는 사실을 확인할 수 있는 방법 필요

  • HTTP 헤더에 Last-Modified 시간 설정

캐시 만료 후 조회시 웹 브라우저 요청시 데이터 최종수정일을 서버에 전송한다.

서버와 캐시의 데이터 수정일이 동일할 경우

  • HTTP응답시 304 NoT Modified 헤더 메타정보만 응답
  • HTTP Body 없음
  • 캐시를 재사용한다.

 

강의출처 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

+ Recent posts