技术与生活 / 一篇记录
304 没有正文,为什么页面还能显示?
客户端已经保存了一份资源,条件请求只是询问这份版本是否仍可使用。服务器返回未修改后,浏览器继续使用本地正文,减少了重复传输。
先明确这里的区别
客户端可以携带已有版本标识,让服务器在内容未变时返回 304。
域名 example.com 仅用于说明,核查自己的网站时请替换目标地址。
curl -I https://example.com/
怎样判断处理正确
先取得 ETag,再用 If-None-Match 发起条件请求。
先记录资源标识,再发起条件请求。服务端返回的版本标识改变时应获得新的正文;如果资源内容改变而标识未变,就要检查缓存生成逻辑。
条件请求并不只依赖 ETag,也可能使用修改时间。不同验证器的精度和更新机制不同,应检查实际服务返回什么。资源被重新部署但内容相同时,验证结果也可能取决于生成策略。
需要留意的是,ETag 是不透明标识,不应假设它一定是内容的 MD5。
参考:HTTP 文档。