캐시가 어떻게 동작하는지 살펴보자!

star.jpg 이미지를 요청한다. 1.1M 정도 용량의 데이터를 응답한다.
star.jpg 이미지를 다시 한 번 요청한다. 1.1M 정도 용량의 데이터를 응답해준다.
cache-control 속성을 넣어주어 캐시가 유효한 시간을 넣어준다. 
cache-control의 max-age를 60으로 지정하여, 60초 동안 유효하도록 한다. 두 번째 요청할 때는 우선 캐시를 조회한다.


캐시가 존재하고 아직 60초 이내이기에 유효한 캐시가 있어서 해당 캐시에서 자료를 가져온다.


star.jpg 이미지를 응답받아서 캐시를 업데이트 해준다. 



Last-Modified)가 있다면 요청 헤더에 if-modified-since에 해당 날짜를 담아서 서버에 보낸다. 
304 Not Modified로 변경된 것이 없다는 것을 알린다. 0.1M만 전송된다. Last-Modified, ETagIf-Modified-Since: Last-Modified 사용If-None-Match: ETag 사용200 OK304 Not ModifiedLast-Modified, If-Modified-Since의 단점ETag, If-None-Match서버에서 완전히 캐시를 컨트롤하고 싶은 경우 ETag를 사용하면 된다.
💡
ETag (Entity Tag)캐시용 데이터에 임의의 고유한 버전 이름을 달아둔다.
ETag만 보내서 같으면 유지하고 바르면 다시 받는다.Cache-Control: 캐시 제어Pragma: 캐시 제어 (하위 호환)Expires: 캐시 유효 기간 (하위 호환)Cache-Control📌 캐시 지시어(
directives)
Cache-Control: max-age
- 캐시 유효 시간이고 초 단위이다.
Cache-Control: no-cache
- 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용해야 한다.
Cache-Control: no-store
- 데이터에 민감한 정보가 있기에 저장하면 안된다. (메모리에서 사용하고 최대한 빨리 삭제)
Pragma캐시 제어 (하위 호환)
Pragma: no-cacheHTTP 1.0 하위 호환Expires캐시 만료일 지정 (하위 호환)
expires: Mon, 01 Jan 1990 00:00:00 GMTHTTP 1.0부터 사용Cache-Contol: max-age를 권장한다. max-age와 동시에 사용되면 Expires는 무시된다. 웹 브라우저가 프록시 캐시 서버에 접근하도록 하는 것이다. → (원 서버에 비해) 응답 시간이 빨라짐.
그래서 한국 사람들이 많이 안보는 유튜브 영상을 보면 상대적으로 느리다!
Origin) 서버 직접 접근
한국에 있는 클라이언트에서 별 이미지가 필요한데 이 이미지가 미국에 있는 원 서버에 있다고 해보자.
한국에서 미국까지 이미지를 가져오려면 0.5초가 걸린다. 실제로 이것보다 훨씬 오래 걸릴 수도 있고, 만약 이 별 이미지가 자주 사용되는 이미지라면 이렇게 매번 미국에서 직접 가져오는 것은 너무 비효율적이다!
위의 문제를 해결하기 위해서 프록시 캐시가 도입되었다.

한국 어디간에 프록시 캐시 서버를 두고, 한국의 클라이언트(웹 브라우저)들은 이 프록시 캐시 서버에서 자료를 가져오도록 한다.
여러 사람이 찾은 자료일수록 이 프록시 캐시 서버에 등록되어있기 때문에 빠른 속도로 자료를 가져올 수 있다.

이때 클라이언트에서 사용되어 저장되는 캐시를 private 캐시라고 하고, 프록시 캐시 서버의 캐시를 public 캐시라고 한다.
Cache-Control📌 캐시 지시어(
directives) - 기타
Cache-Control:public
- 응답이
public캐시에 저장되어도 된다.Cache-Control:private
- 응답이 해당 사용자만을 위한 것으로
private캐시에 저장해야 한다(default)Cache-Control:s-maxage
- 프록시 캐시에만 적용되는
max-ageAge: 60(HTTP 헤더)
- 오리진 서버에서 응답 프록시 캐시 내에 머문 시간(초)