Web Caches의 목적
클라이언트의 요청을 Origin server 까지 접속하지 않고 Web cache에서 처리.

브라우저는 Web cache에 모든 HTTP 요청들을 전송한다.
- 만약 요청 object가 Web cache에 존재하면, Web cache에서 응답한다.
- 만약 요청 object가 Web cache에 존재하지 않는다면, Web cache는 이를 origin server에 요청하여 받고, 이를 클라이언트에게 돌려준다.
웹캐시는 클라이언트와 서버의 역할을 동시에 수행한다.
- 클라이언트에게는 서버의 역할을 수행한다.
- 원본 서버에게는 클라이언트의 역할을 수행한다.
Why Web caching?
- 클라이언트 요청 응답 시간 감소
- 기관 access link의 트래픽 감소
- 인터넷은 캐시가 촘촘히 분포되어 있어, '열악한' 콘텐츠 제공자들이 더 효과적으로 콘텐츠를 전달할 수 있게 한다.
Caching Example
시나리오:
- access link rate: 1.54Mbps
- RTT from institutional router to server: 2 sec
- Web object size: 100K bits
- average request rate from browsers to origin servers: 15/sec
- average data rate to browsers: 1.50Mbps (15/sec * 100k bits)

Performance:
Option 1: buy a faster access link
시나리오:
- access link rate: 1.54Mbps -> 154Mbps
- RTT from institutional router to server: 2 sec
- Web object size: 100K bits
- average request rate from browsers to origin servers: 15/sec
- average data rate to browsers: 1.50Mbps (15/sec * 100k bits)
Performance:
- access link utilization = 0.97 -> 0.0097
- Lan utilization = 0.0015
- end-end delay = Internet delay + access link delay + Lan delay = 2 sec + msecs + μsecs
cost:
Option 2: install a web cache
시나리오:
- access link rate: 1.54Mbps
- RTT from institutional router to server: 2 sec
- Web object size: 100K bits
- average request rate from browsers to origin servers: 15/sec
- average data rate to browsers: 1.50Mbps (15/sec * 100k bits)
Performance:
cache hit rate를 0.4 로 가정.
- 40%의 요청은 낮은 delay(msecs)로 local web cache에서 처리.
- 60%의 요청은 이전과 같이 처리.
- 0.6 * 1.50Mbps = 0.9Mbps
- access link utilization = 0.9 / 1.54 = 0.58 -> 낮은 delay(msecs)
- average end-end delay:
= 0.6 (delay from origin servers) + 0.4 (delay when cache hit)
= 0.6 * (2.01) + 0.4(~msecs) = ~1.2secs
154Mbps의 접속 링크를 설치하는 것보다 average end-end delay가 낮고, 비용적으로 저렴하다.
Conditional GET
캐시 내부에 있는 오브젝트가 최신 상태면 오브젝트를 보내지 말 것.
클라이언트는 오브젝트가 캐싱된 날짜를 HTTP request 메시지에 넣어 보낸다.
If-modified-since: <날짜> (transmission 딜레이 또는 네트워크 자원 소모 없음)
- 오브젝트가 최신 상태일 경우(변경되지 않은 경우): 304 Not Modified
- 클라이언트는 캐싱된 오브젝트를 그대로 사용한다.
- 오브젝트가 최신 상태가 아닌 경우(변경된 경우): 200 OK + obj
- 클라이언트는 최신 오브젝트를 서버로 부터 전송받고, 기존 캐시된 오브젝트도 교체한다.
