ETag 到底省了什么?用正文哈希做 ETag 是不是真的快?If-None-Match 与 Last-Modified 怎么配合?这篇用慢查询把 304 的耗时和带宽量出来。
第一次 → 200 | ETag = "ecea853257b1cff7d9816bd5975acb07cde13cf3" | 正文 48039 字节 带 If-None-Match → 304 | 正文 0 字节 | ETag 头仍在: True If-None-Match 是别的值 → 200 | 正文 48039 字节 If-None-Match 是列表 "x", ETag, "y" → 304 POST 带 If-None-Match → 405 (路由只允许 GET) ETag 是正文的哈希吗: True (Werkzeug 的 add_etag 用正文的 SHA-1 十六进制)
上一篇:CORS 预检请求;下一篇:OpenAPI 文档生成。
哈希 ETag:200(没带头) 59.88 ms 状态 200 正文 48039 字节 哈希 ETag:304 63.63 ms 状态 304 正文 0 字节 版本号 ETag:200 55.73 ms 状态 200 正文 48039 字节 版本号 ETag:304 0.41 ms 状态 304 正文 0 字节 数据变了(版本号 → v2)后,带旧 ETag 的请求 → 200 新 ETag "v2"
第一次 → 200 | Last-Modified = Thu, 01 Jan 2026 00:00:00 GMT 带 If-Modified-Since(同一时间)→ 304 If-Modified-Since 是更早的时间 → 200
ETag = W/"abc" If-None-Match: W/"abc" → 304 | If-None-Match: "abc"(强)→ 304 (If-None-Match 用弱比较,两者都匹配)
200 响应体 48039 字节;304 响应体 0 字节;头部总字节(估算)200: 142,304: 87