🔌 第五章 服务器端的局域网中有什么玄机
📄 一句话概括

缓存怕旧——拿文件的更新时间与源站对账(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 秒实验

  1. 用浏览器开发者工具找一条 If-Modified-Since 请求。
  2. 算算 100 万次访问省掉 90% 的文件传输意味着什么。
  3. 查查 ETag 与更新时间对账的区别。

常见误区

  1. 以为缓存不用问源站——对账一趟是省不掉的。
  2. 以为对账很费流量——只回一个【没变】,几乎为零。
自测三问(点开对答案) 1. 对账问什么? —— 文件 X 时间之后改过没。 2. 没改时省掉什么? —— 文件本体传输。 3. 对应的 HTTP 字段? —— If-Modified-Since。

相关笔记