万维网缓存与代理服务器 — 三种工作场景
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-Modified 和 Expires 告知缓存策略 → 代理服务器缓存过期后用 If-modified-since 验证 → 未修改返回 304,已修改返回 200+新文档。