CS 168 · LECTURE 16 · 2026-10-20 · 应用与端到端

HTTP、缓存与内容分发网络

HTTP 的性能来自连接复用、缓存和内容放置;CDN 把“去哪取对象”变成 DNS、路由与应用策略的联合决策。

版本快照:Fall 2026 官方课表与在线教材,核对日期 2026-09-02;官网仍标注 under construction,日期与政策可能变化。

  1. 互联网地基
  2. 路由
  3. 传输
  4. 应用与端到端
  5. 数据中心
  6. 群体通信
  7. 无线与移动

本章核心问题

同一网页有几十个对象时,握手、依赖、缓存与队头阻塞怎样共同决定首屏时间?

1 · 请求与响应契约

请求包含 method、target、headers 和可选 body;响应包含 status、headers 与 body。GET 通常是安全且幂等的读取,POST 常用于提交状态变化,但最终语义由服务定义。

Host/:authority 让同一 IP 承载多个站点。Content-Length、chunked framing 或协议帧界定对象边界,不能依赖 TCP 的 recv 次数。

2 · 连接与并发

HTTP/1.1 persistent connection 避免为每个对象重复 TCP 握手,但单连接按序处理会受 head-of-line blocking。浏览器常开多个连接或用 pipelining 的有限变体。

HTTP/2 在一条 TCP 上多路复用 stream,消除应用层队头,却仍受 TCP 丢包影响;HTTP/3 基于 QUIC,让不同 stream 的丢失恢复更独立。协议升级改变的是阻塞边界,而非光速。

3 · 缓存正确性

Cache-Control 指定 freshness 与共享规则,ETag/Last-Modified 支持条件请求。命中 fresh 对象可直接返回;stale 对象可用 If-None-Match 验证,304 响应避免重传 body。

缓存 key 若遗漏 Vary 指定的请求维度,会把错误版本交给用户;若把用户私有响应放入共享缓存,则可能泄露数据。性能优化必须服从语义隔离。

4 · CDN 的两次选择

权威 DNS 可把用户引向合适的边缘站点,BGP/anycast 再把地址流量送往拓扑上可达的实例。选择可能考虑地理/网络距离、负载、故障与内容是否已缓存。

边缘 miss 会回源并填充缓存。评估 CDN 不能只看 hit ratio,还要按对象大小、流行度和回源成本加权。

纠错:最容易带走的错误模型

闭卷推演

为含 HTML、CSS、JS 和 20 张图的页面分别画 HTTP/1.1 多连接、HTTP/2 与 HTTP/3 的关键阻塞点,并标出缓存命中后被删除的网络往返。

检查:ETag 最直接用于什么?

机制工作台:before → event → after

Before / local state

browser 先复用/建立连接,发送 HTTP request

Event / after / output

browser 先复用/建立连接,发送 HTTP request;cache/CDN 根据 key 与 freshness state 决定命中、回源或验证。

检查:判断一个实现分支是否必要,最有力的问题是什么?

Explain It Yourself

跟踪一次 stale cache revalidation 的 request/response。

自检方法

答案必须出现 packet/message、local state/table、触发 event、after state 与 output;只给定义不算完成。

一手资料

正文是 CourseStack 的中文解释与重新绘制的教学例子;官方页面负责课程原始定义,历史仓库只提供你的实现证据。