
본 게시글은 인프런의 모든 개발자를 위한 HTTP 웹 기본 지식 (김영한) 강의를 듣고 정리한 내용입니다.


Cache-Control을 통해 캐시 유효시간 설정 가능

Last-Modified(데이터 최종 수정일)를 응답 헤더에 포함Last-Modified 값을 캐시에 저장

Last-Modified 비교 시 변경되지 않았다면 304 Not Modified 응답Q: 캐시에 저장된 데이터를 재활용한다는 것은 만료된 데이터가 남아 있다는 의미인가?
A: 캐시된 데이터가 만료되었더라도 검증 과정을 거쳐 변경되지 않았음을 확인하면 재활용할 수 있음. 즉, 일부 데이터가 남아있다는 것.
Last-Modified, ETag를 활용하여 캐시 데이터와 서버 데이터의 일치 여부를 검증If-Modified-Since: Last-Modified 값 사용If-None-Match: ETag 값 사용200 OK, 만족하지 않으면 304 Not Modified2020년 11월 10일 10:00:00)Q: 데이터를 복사 붙여넣기 하면 수정된 날짜가 다르지만 데이터는 같은 건가?
A: 맞음. 내용이 변하지 않아도 저장 시점이 다르면Last-Modified값은 달라질 수 있음.
ETag: "v1.0", ETag: "a2jiodwjekjl3"



Q: Last-Modified의 단점을 보완하기 위해 ETag를 활용한다고 하는데, 어떻게 동작하는가?
A:Last-Modified는 날짜 기반으로 변경을 감지하지만,ETag는 파일의 내용 기반으로 변경을 감지함.
즉,Last-Modified는 파일의 내용이 변하지 않아도 수정 시간이 갱신되면 다르게 판단하지만,ETag는 파일의 내용이 같다면 같은 해시값을 유지하므로 불필요한 다운로드를 줄일 수 있음.
Cache-Control: 캐시 제어Pragma: HTTP 1.0 하위 호환용 캐시 제어Expires: HTTP 1.0 캐시 유효 기간max-age: 캐시 유효 시간(초 단위)no-cache: 캐시 데이터를 사용하기 전에 항상 원 서버에서 검증 필요no-store: 민감한 정보가 포함된 데이터는 캐시 저장 불가 (즉시 삭제)
public: 응답이 공용 캐시에 저장 가능private: 응답이 특정 사용자 전용 (기본값)s-maxage: 프록시 캐시에만 적용되는 max-ageAge: 프록시 캐시에 머문 시간 (초 단위)no-cache: 캐시 데이터를 사용하기 전에 항상 원 서버 검증 필요no-store: 민감한 데이터이므로 캐시 저장 불가 (즉시 삭제)must-revalidate: 캐시 만료 후 반드시 원 서버 검증 필요, 실패 시 오류 (504 Gateway Timeout)Pragma: no-cache: HTTP 1.0 하위 호환Q:
no-cache는 캐시를 사용할 수 있는데, 원 서버 검증이 필요하다는 것이 무슨 의미인가?
A: 캐시를 보관하지만 사용 전에 원 서버의 검증을 거쳐야 함. 변경되지 않았다는 확인이 되면 캐시를 사용함.


Q: 웹 브라우저 → 프록시 캐시 서버 → 원 서버 → 프록시 캐시 서버 → 브라우저 캐시를 거쳐 클라이언트에 반환되는 흐름이 맞는가?
A: 맞음. 프록시 캐시 서버가 상태 코드(304 Not Modified)만 반환하면 브라우저는 기존 캐시된 데이터를 사용함.
