1. 캐싱 주체별 구분
ㅇ 서버 캐싱
- 캐시 서버 : 캐싱 만을 전용으로하는 서버를 둠
- 프록시 서버 : 다수의 클라이언트를 대신하여 일을 할 수 있는 서버
ㅇ 브라우저 캐싱
- 웹 브라우저 : 웹브라우저 자신이 소속되어있는 로컬 하드디스크에 캐시 저장
2. 캐시 동작 메커니즘
ㅇ HTTP 메소드별 캐시 동작 구분
- GET, HEAD : 캐시 함을 기본으로 함
- 이외 모든 메소드(POST 등 ) : 캐시 안함을 기본으로 함
ㅇ 강제 지시에 의한 캐시 동작
- (pragma: HTTP/1.0) : 프록시 서버 및 클라이언트에 대한 강제 지시
. 동일 컨텐츠를 이미 저장해 두고 있어도, 원래 웹서버에서 다시 가져오도록 함
.. 例) pragma: no-cache
ㅇ 일시를 기준으로 한 캐시 동작
- (Last-Modified: HTTP/1.0) : 갱신 일시를 기준으로 한 캐시 제어 메커니즘
. 웹서버가 HTTP 응답메세지에 아래 헤더 항목을 포함시켜 보내면,
.. 例) Last-Modified: Wed, 15 Mar 2017 05:22:47 GMT
. 후에, 웹브라우저가 해당 URL을 다시 읽을 때는, 위 일시를 아래 처럼 그대로 딸려서 보냄
.. 例) If-Modified-Since: Wed, 15 Mar 2017 05:22:47 GMT
. 이때, 웹서버는 보내준 일시와 비교하여,
.. 해당 컨텐츠가 변경되었으면, 200 OK
.. 해당 컨텐츠가 변경 안되었으면, 304 Not Modified 를 반환하고, 컨텐츠 본문 미 송출
. 만일, 304 Not Modified 이면,
.. 웹브라우저는 기 저장된 캐시를 사용하여 사용자에게 보여줌
- (Expires: HTTP/1.0) : 만료 일시(캐시 수명)에 따른 캐시 제어 메커니즘
. 아예 캐시의 유효성 확인을 위한 통신도 필요없게 하는 방법
. 과거 캐시되었던 파일의 캐시 수명 일시와 비교하여 웹서버 접속 여부 결정
.. 例) Expires: Wed, 15 Mar 2017 05:22:47 GMT
ㅇ 갱신 일시가 아닌 파일 해시 값을 기준으로 한 동작
- (ETag: HTTP/1.1)
ㅇ HTTP 캐시 제어 메커니즘 (Cache-Control: HTTP/1.1)
* 웹서버측에서, 보다 유연하게 캐시를 제어할 수 있도록, HTTP/1.1에서 추가됨
- Cache-Control: no-store (아예 캐시 하지 말도록 지시)
- Cache-Control: no-cache
- Cache-Control: must-revalidate
- Cache-Control: max-age=n (캐시의 신선도를 초 단위로 설정)