万维网缓存与代理服务器 — 三种工作场景

1 场景一:缓存命中 — 直接返回

用户主机
请求 index.htm
代理服务器
缓存中有 index.htm 且未过期
原始服务器
(不参与)
① HTTP 请求
② 直接返回缓存副本

代理服务器缓存中有用户请求的文档(如 index.htm),且文档未过期

代理服务器直接从自己的 Web 缓存中取出文档,封装在 HTTP 响应报文中返回给用户主机。

原始服务器完全不参与这次请求。

最快响应,零因特网流量。

2 场景二:缓存未命中 — 代理向原始服务器请求

用户主机
请求 index.htm
代理服务器
缓存中无 index.htm
原始服务器
存有 index.htm
① 请求
② 代理请求原始服务器
③ 返回文档
④ 返回文档
存入缓存

代理服务器缓存中没有用户请求的文档。

① 用户主机向代理服务器发请求。
② 代理服务器向因特网上的原始服务器发请求。
③ 原始服务器返回文档。
④ 代理服务器将文档存入 Web 缓存,同时返回给用户主机。

首次请求较慢,但后续相同请求可以命中缓存。

3 场景三:缓存过期 — 向原始服务器验证

用户主机
请求 index.htm
代理服务器
缓存中有 index.htm 但已过期
原始服务器
比较修改时间
If-modified-since: 某日期
304 Not Modified(未修改)
或 200 OK + 新文档(已修改)

代理服务器缓存中有文档但已过期。需要向原始服务器验证文档是否有变化。

代理服务器发送请求,携带 If-modified-since 首部(值为缓存文档的最后修改日期):

文档未修改 → 原始服务器返回 304 Not Modified(不含实体主体),代理服务器更新该文档的有效日期后返回给用户。
文档已修改 → 原始服务器返回 200 OK 和新文档,代理服务器更新缓存和有效期后返回给用户。

代理服务器的三大作用

作用说明
减少出口带宽同一个网络(如校园网)内多个用户请求相同的因特网资源时,只需从原始服务器获取一次,后续请求从代理服务器的缓存返回。
降低访问延迟缓存命中时,响应从本地代理服务器返回——通常比跨因特网从原始服务器获取快得多。
减轻原始服务器负载大量重复请求被代理服务器拦截并缓存返回,不会到达原始服务器。

缓存一致性的关键首部

首部字段来源含义
Last-Modified响应报文文档的最后修改时间
Expires响应报文文档的有效期
If-modified-since请求报文向服务器验证:自此时间后文档是否修改

核心流程:原始服务器用 Last-ModifiedExpires 告知缓存策略 → 代理服务器缓存过期后用 If-modified-since 验证 → 未修改返回 304,已修改返回 200+新文档。