캐시
-캐시가 없을때: 데이터가 변경되지 않아도 네트워크를 통해 데이터를 다운 받아야함
-캐시 적용: 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지않고 캐시 저장소에서 바로 꺼낼수 있음
검증 헤더(서버: last-modified)와 조건부 요청(클라이언트: If-modified-since)
-캐시 유효시간 초과시
-1.서버에서 기존 데이터를 변경함
-2.기존데이터와 똑같음
-캐시 만료후 기존 데이터를 변경하지 않음
-클라이언트의 데이터와 서버의 데이터가 같다는 사실만 알면 재새용 가능 -> 검증헤더 추가
-304 Not Modified + 헤더 메타 정보만 응답(바디 X)
-클라이언트는 캐시의 메타정보를 갱신하고 캐시에 저장되어 있는 데이터 재활용(작은 헤더 정보만 다운로드)
-검증헤더:캐시 데이터와 서버 데이터가 같은지 검증
-Last-Modified, ETag
-조건부 요청 헤더
-조건에 따른 분기
-If-Modified-Since(요청): Last-Modified(응답), If-None-Match(요청): ETag(응답) 끼리 사용
-조건이 만족 200 OK, 만족하지 않으면 304 Not Modified
-If-Modified-Since: Last-Modified의 단점
-최종 수정된 데이터는 똑같은데 업데이트는 된 상황(새로고침)
-서버에서 별도의 캐시 로직을 관리하고 싶은 경우(주석처럼 영향이 없는 변경에서는 캐시를 유지)
-개선: ETag, If-None_Match 사용
-캐시용 데이터에 임의의 고유한 버전 이름을 달아둠
-ETag만 보내서 같으면 유지, 다르면 다시받기(해시값)
-캐시 제어로직을 서버에서 완전히 관리(클라이언트는 매커니즘 모름)
캐시와 조건부 요청 헤더
-Cache-Control: 캐시 제어
-Pragma: 캐시 제어(하위 호환)
-Expires: 캐시 유효 기간(하위 호환)
-Cache-Control: 캐시 제어(캐시 지시어(directives))
-Cache-Control: max-age
-캐시 유효 시간, 초단위
-Cache-Control: no-cache
-데이터는 캐시해도 되지만, 항상 원(ORIGIN) 서버에 검증하고 사용(조건부 요청)
-Cache-Control: no-store
-데이터에 민감한 정보가 있으므로 저장하면 안됨
-Cache-Control: must-revalidate
-캐시 만료후 최초 조회시 원 서버에 검증해야함
-원 서버 접근 실패시 반드시 오류가 발생해야함(504 Gateway Timeout)
프록시 캐시(중간에 경유하는 캐시 서버)
-Cache-Control: public (응답이 public 캐시에 저장되어도 됨)
-Cache-Control: private (응답이 해당 사용자(private)만을 위한것임)
캐시 무효화: 확실한 캐시 무효화 응답(캐시 쓰지마)
-Cache-Control: no-cache, no-store, must-revalidate + Pragma: no-cache(HTTP 1.0 버전일수도 있기에)
'웹 프로그래밍 > HTTP' 카테고리의 다른 글
HTTP 헤더(1) (0) | 2023.02.26 |
---|---|
HTTP 상태코드 (0) | 2023.02.24 |
HTTP 메서드 활용 (0) | 2023.02.24 |
HTTP 메서드 (0) | 2023.02.22 |
HTTP (0) | 2023.02.22 |