etag 中的 W/ 从哪里出现?

Sun*_*nny 5 etag http nginx http-headers node.js

当我没有添加它时,我对 W/ 在 etag 中的显示方式感到困惑。我正在使用 Node.js http 服务器模块并有一个 Nginx 作为反向代理。我让浏览器看到 Node.js 服务器生成的 Etag,但带有 W/ 标记。

有人能解释一下 W/ 来自哪里吗?浏览器是否根据其确定它是一个弱 etag 来插入它?我希望浏览器在我发送时得到它。没有 W/ 前缀。

这是在浏览器中看到的 Etag 标头。

etag: W/"asv1534746804282-d62serveav"
Run Code Online (Sandbox Code Playgroud)

当试图与 if-none-match 进行比较时,我必须去掉 W/. 另外,对于 304 状态响应,我是否必须再次发送 Etag?

编辑:我自己添加了 W/ 以便 Nginx 保持不变。我希望我的假设是正确的。看来是。

Kev*_*nry 8

如果您要求 nginx 动态压缩您的内容,它会将您的 ETag 转换为弱的。这是规范要求,因为强 ETag 只能用于字节对字节相同的内容。

如果同时由给定资源的两个或多个表示共享,则验证器是弱的,除非这些表示具有相同的表示数据。例如,如果源服务器为应用了 gzip 内容编码的表示发送与没有内容编码的表示相同的验证器,则该验证器是弱的。