You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTTP If-None-Match请求头中正确向Web服务器回传Etag

HTTP缓存ETag传参规范

问题描述

基于Last-Modified与ETag响应头实现HTTP缓存机制时,常见服务端返回的ETag共3种格式:

  • 无引号强ETag:示例值 wAUL9rDkgMueFoa7ZLPa/Vjx3ak
  • 带双引号强ETag:示例值 "a8ef0-5b8e443cf07ba-gzip"
  • 弱校验ETag:示例值 W/"17ba-WxSGP4eaXoBk6hGG35IOD+5mrwQ"

发起缓存校验请求时需要携带If-None-Match请求头,若资源未变更服务端会返回304状态码。需要明确的核心疑问是:回传ETag时是否需要移除外层引号、弱ETag是否需要去掉W/前缀。

标准答案

不要对从响应头中获取到的原始ETag值做任何修改,直接原样填入If-None-Match请求头即可,禁止手动移除引号、删除弱ETag的W/前缀。

规则细节

  • 按照HTTP协议规范,双引号是强ETag值的法定组成部分,W/前缀是弱ETag的固定标识,二者都不是多余的转义字符,一旦删除就会导致ETag值和服务端存储的原值不匹配。
  • 无引号的ETag属于部分服务端的非标准实现,遇到这类值同样直接原样回传即可,不需要手动补充双引号。
  • 只要保证缓存存储的ETag值和响应头返回的内容完全一致,回传时不做任何增删改,就能兼容所有合规、非合规的服务端实现,不会出现匹配失败的问题。

传参示例

  1. 收到带双引号的强ETag "a8ef0-5b8e443cf07ba-gzip" 时,正确传参:
    If-None-Match: "a8ef0-5b8e443cf07ba-gzip"
    
    错误做法是移除引号传 a8ef0-5b8e443cf07ba-gzip。
  2. 收到弱ETag W/"17ba-WxSGP4eaXoBk6hGG35IOD+5mrwQ" 时,正确传参:
    If-None-Match: W/"17ba-WxSGP4eaXoBk6hGG35IOD+5mrwQ"
    
    错误做法是移除W/前缀和外层引号,传纯校验值 17ba-WxSGP4eaXoBk6hGG35IOD+5mrwQ。
  3. 收到无引号非标准ETag wAUL9rDkgMueFoa7ZLPa/Vjx3ak 时,直接原样透传即可。

注意:部分CDN、反向代理会自动修改源站返回的ETag格式,只要你不主动修改拿到的原始值,就不会受这类代理逻辑影响。


内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 04:18:23