Cache-Control 헤더

  • 브라우저의 응답 캐시를 제어.
  • 캐시가 잘 된 경우 개발자도구에 status=200, size=(disk cache)로 표시됨.
  • Cache-Control 지시문 예시
    • Cache-Control: no-store - 캐시하지 않음.
    • Cache-Control: no-cache - 서버에 요청하여 캐시를 사용할 것인지 결정…? (미확인)
    • Cache-Control: public(private), max-age=60 - 공유캐시/브라우저에 1분 동안 캐시

ETag 헤더

  • 응답 본문의 해시값(md5)을 보관. If-None-Match 요청 헤더와 비교하여 캐시 사용 여부를 판단.
  • 캐시가 잘 된 경우 개발자도구에 status=304, size=90B로 표시됨.
  • 서버에서 DB처리 등은 원래대로 하지만(+해시처리), 네트워크 전송량은 대폭 줄어들 수 있다.

  • ETag를 사용한 캐시 업데이트
    • 최초 요청을 받으면 서버에서 응답 본문을 해시(etag 패키지 사용)하여 ETag 헤더로 내려보낸다.
    • 브라우저는 ETag 헤더의 값을 보관하고 있다가 동일 URL 요청 시 If-None-Match 헤더에 담아 보낸다.
    • 서버에서 응답 본문을 다시 해시한 값과 If-None-Match 헤더를 비교한다.
    • 비교한 값이 같으면 캐시를 사용하고(304로 응답하면 됨), 비교한 값이 다르면 캐시를 사용하지 않는다(200+본문으로 응답하면 됨).
    • 서비스워커에서 네트워크로 처리를 넘길 경우 서비스워커가 먼저 200으로 응답하고 이어서 네트워크가 304 로 응답함.
    • express의 경우 app.set() 등으로 etag를 설정할 수 있다고 하나, polka에서는 설정방법을 찾을 수 없어 etag 패키지를 사용하여 수동으로 응답 헤더에 추가함. static 리소스인 경우 sirv의 etag 옵션이 존재함.

Last Modified 헤더

  • ETag와 유사하지만 해시값 대신 리소스 변경 시간을 사용. If-Modified-Since 요청헤더와 비교. (미확인)

참고