---
title: ETag 与 If-None-Match:条件请求与缓存一致性
keywords:
- ETag
- If-None-Match
- 304 Not Modified
- 条件请求
- 缓存治理
description: 使用 ETag/If-None-Match 配合条件请求实现缓存一致性与带宽节省,示例覆盖服务端生成与客户端请求行为。
categories:
- 应用软件
- 聊天工具
---
概述
ETag 作为资源标识符用于条件请求。客户端携带 If-None-Match 与 ETag,服务器匹配后返回 304 Not Modified,避免重复传输。
用法/示例
HTTP/1.1 200 OK
ETag: "686897696a7c876b7e"
GET /asset.css HTTP/1.1
If-None-Match: "686897696a7c876b7e"
// Node/Express 示例
app.get('/asset.css', (req, res) => {
const etag = computeHash(content)
if (req.headers['if-none-match'] === etag) res.status(304).end()
else { res.set('ETag', etag); res.type('text/css').send(content) }
})
工程建议
- 使用强/弱验证器(
W/)区分字节级与语义级变更;与缓存头协同治理。 - 确保跨节点一致的 ETag 生成,避免负载均衡导致失配。
- 对压缩与变体(
Vary)处理进行明确配置,避免错误复用。
参考与验证
- MDN:ETag — https://developer.mozilla.org/docs/Web/HTTP/Headers/ETag
- MDN:If-None-Match — https://developer.mozilla.org/docs/Web/HTTP/Headers/If-None-Match

发表评论 取消回复