HTTP 헤더2
모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 간단하게 정리한 내용 및 추가로 알게 된 내용입니다.
캐시
캐시들은 일반적으로 GET에 대한 응답만을 캐싱한다
캐시가 없으면 데이터가 변경되지 않아도 네트워크를 통해 데이터를 다운받아야 한다.
비싼 네트워크 사용량을 줄일 수 있다.
로딩 속도가 빨라진다.
캐시 시간 초과
캐시 유효시간이 초과하면, 서버를 통해서 캐시를 갱신한다.
검증 헤더 추가
기존 데이터가 변경되거나 변경되지 않을 수 있음.
변경되면 캐시를 갱신해야하지만 변경되지 않으면 기존 캐시를 재사용하는게 이득임.
따라서 검증 헤더를 추가해 준다.
요청 할 때 최종 수정한 시간을 보내서, 서버에서 최종 수정 시간을 체크하여 차이가 있으면 데이터를 보내고
차이가 없으면 304 Not Modified와 헤더 메타정보만 응답한다.
검증 헤더
검증 헤더에는 Last-Modified, ETag가 있다.
If-Modified-Since: Last-Modified 사용
GET 또는 HEAD에만 쓸 수 있음
If-None-Match: ETag 사용
If-Modified-Since: Last-Modified 특징
1초 미만 단위로 캐시 조정 불가능
날짜 기반의 로직 사용
같은 데이터지만 수정 날짜가 달라지면 다시 보내야하는 단점이 있음
ETag 특징
ETag(Entity Tag) 엔티티 태그
임의의 고유한 버전 이름을 붙인다.
데이터가 변경되면 이름을 변경한다.
캐시 제어 헤더
Cache-Control: 캐시 제어
캐시 지시어(directives)
Cache-Control: max-age
캐시 유효 시간, 초 단위
Cache-Control: no-cache
데이터는 캐시해도 되지만, 유효성 확인을 위해 Origin 서버에 검증 요청을 하고 사용
Cache-Control: no-store
저장하면 안됨
Pragma - 하위 호환 필요하면 사용
Expires
캐시 말료일 지정(하위 호환)
max-age 사용을 권장
프록시 캐시
웹 브라우저(private 캐시) <-> 프록시 캐시 서버(public 캐시) <-> Origin 서버
캐시 지시어
Cache-Control: public
응답이 public 캐시에 저장되어도됨
Cache-Control: private
응답이 해당 사용자만을 위한 것임, private 캐시에 저장해야 함(기본값)
캐시 무효화
웹 브라우저가 임의로 캐쉬하는 것을 막을 수 있다.
캐시 지시어
Cache-Control: no-cache
데이터는 캐쉬해도 되지만, Origin 서버에 검증하고 사용
Cache-Control: no-store
저장하면 안됨(메모리에서 사용하고 최대한 빨리 삭제)
Cache-Control: must-revalidate
캐시 만료후 최초 조회시 Origin 서버에 검증해야 함
Origin 서버 접근 실패시 반드시 오류 발생 - 504(Gateway Timeout)
no-cache와 차이점은 no-cache는 Origin 서버 장애시 프록시에서 예전 데이터를 보내줄 수 있음
캐시 유효 시간이라면 캐시를 사용함
Pragma: no-cache
HTTP 1.0 하위 호환
참고
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/If-Modified-Since
https://developer.mozilla.org/ko/docs/Web/HTTP/Caching
추가적으로 가볼만한 사이트