캐시를 사용해야하는 이유
- 캐시 없이 매번 데이터를 다운로드하면,
- 네트워크로 매번 데이터를 다운로드하면 느리고, 비싸다.
- 브라우저 로딩 속도가 느리다
- 사용자에게 표시되는 속도가 느려 사용자 경험 측면에서 불리
- 캐시를 적용하는 것으로,
- 캐시 가능 시간동안 네트워크 사용이 감소
- 브라우저 로딩 속도가 빠르다.
- 사용자 경험 측면에서 유리
캐시 유효시간, 검증 헤더, ETag
- 캐시 유효시간이 만료되면, 서버에 다시 다운로드를 요청한다.
- 이때, 마지막으로 수정된 시간
Last-Modified
를 통해 변경 여부를 확인
- 변경되지 않았다면
304 Not modifed
코드와 함께 빈 http body 를 응답한다. (헤더만 응답)
- 클라이언트는 캐시 데이터 재활용 & 메타 정보 갱신
- 수정된 시간 외에도
ETag
를 통해 데이터가 동일한지 확인
- 검증 헤더로 분기
If-None-Match
: ETag 사용
If-Modified-Since
: Last-Modified 사용
Cache-Control
- 캐시 지시어(directives)
Cache-Control: max-age
: 캐시 유효 시간, 초 단위
Cache-Control: no-cache
: 데이터는 캐시해도 되지만, 항상 원 서버에 검증 후 사용
Cache-Control: no-store
: 저장하지 않음
Cache-Control: must-revalidate
: 캐시 만료후 최초 조회시 원 서버에 검증해야함
no-cache
와 차이는 캐시 프록시 서버에서 원 서버 접근 불가시, no-cache
는 캐시 프록시 설정에 따라 응답이 가능하지만 must-revalidate
는 504 Gateway timeout
을 리턴


Expires
- 캐시 만료일을 명시적으로 지정
expires
보다는 Cache-Control: max-age
사용 권장
- 둘을 동시 사용할 경우
expires
는 무시됨