📄 一句话概括
缓存怕旧——拿文件的更新时间与源站对账(If-Modified-Since):没改就用缓存(几乎不费流量),改了才重新取;大多数内容其实没改,省流量靠这一点。
📝 本节和前面几节的关系
5.4.1 说了缓存会存内容;本篇解决【怎么知道该不该换】。
一、对账机制
缓存带着【我是 X 时间取的】去问源站: 没改——源站只回一句【没变】,不传文件; 改了——源站回新文件,缓存更新。
二、省在哪
每次请求仍要与源站对一趟账(省不掉往返), 但省掉了文件本体的传输—— 大多数内容没改,所以总体流量大减。
三、动手 Demo:更新时间对账
缓存怕旧,怎么知道该不该换?用文件的更新时间对账:
for s in ['缓存: 我这份 2026-10-13 10:00 取的,改过没?',
源站: 没改 -> 用缓存吧(不传文件,几乎不费流量)',
源站: 改了 -> 给你新文件']:
print(s)
print()
print('对应 HTTP 的 If-Modified-Since')
实跑输出:
--------------------------------------------------------------------
更新时间对账
--------------------------------------------------------------------
缓存怕旧,怎么知道该不该换?用文件的更新时间对账:
缓存: 我这份 2026-10-13 10:00 取的,改过没?
源站: 没改 -> 用缓存吧(不传文件,几乎不费流量)
源站: 改了 -> 给你新文件
对应 HTTP 的 **If-Modified-Since**——
省流量的关键:大多数内容其实没改。
⭐ 2026 现状:HTTP/1.1 里还有更省的 ETag 方案 (按内容指纹对账,不看时间),思路一脉相承。
30 秒实验
- 用浏览器开发者工具找一条 If-Modified-Since 请求。
- 算算 100 万次访问省掉 90% 的文件传输意味着什么。
- 查查 ETag 与更新时间对账的区别。
常见误区
- 以为缓存不用问源站——对账一趟是省不掉的。
- 以为对账很费流量——只回一个【没变】,几乎为零。
自测三问(点开对答案)
1. 对账问什么? —— 文件 X 时间之后改过没。 2. 没改时省掉什么? —— 文件本体传输。 3. 对应的 HTTP 字段? —— If-Modified-Since。- ☐ 下一节(5.4.3 最原始的代理——正向代理)
相关笔记
- 最原始的代理——正向代理 — 代理家族开讲
- 5.7-5.9 延伸三岗位(FTP、IMAP、Proxy) — Proxy 的服务器视角
- 🔌 网络是怎样连接的 · 索引