跳转到内容
搜索文档

在 Cloudflare 中使用 ETag 标头

最后更新 查看 MarkdownAgent 设置

ETag 标头标识浏览器缓存中的资源版本是否与源站 Web 服务器上的资源相同。访问者的浏览器存储 ETag。当访问者再次访问站点时,浏览器将每个 ETag 与其存储的 ETag 进行比较。匹配的值导致 304 Not-Modified HTTP 响应,表示缓存资源版本是最新的。Cloudflare 支持在源站 Web 服务器上配置的强 ETag 和弱 ETag。

弱 ETag

弱 ETag 标头表示缓存的资源在语义上等同于 Web 服务器上的版本,但不一定逐字节相同。

强 ETag

强 ETag 标头确保浏览器缓存和 Web 服务器中的资源逐字节相同。使用 Cache Rules 来启用强 ETag 标头。

启用"遵循强 ETag"时的行为

在缓存规则中启用 Respect Strong ETags(遵循强 ETag) 时,Cloudflare 将使用强 ETag 标头验证,确保 Cloudflare 缓存和源站服务器中的资源逐字节相同。

但是,在某些情况下,Cloudflare 会将强 ETag 转换为弱 ETag。例如,在以下条件下:

  • 已启用 Respect Strong ETags(遵循强 ETag)
  • 已启用 Brotli 压缩
  • 源站服务器的响应包含 etag: "foobar" 强 ETag 标头

Cloudflare 网络将根据访客的 accept-encoding 标头和源站服务器响应中使用的压缩方式采取以下操作:

访客发送的 accept-encoding
标头
源站服务器响应中使用的压缩 Cloudflare 操作
gzip, br GZIP 向访客返回 GZIP 压缩的响应,带强 ETag 标头:etag: "foobar"
gzip, br Brotli 向访客返回 Brotli 压缩的响应,带强 ETag 标头:etag: "foobar"
br GZIP 解压 GZIP 并向访客返回未压缩响应,带弱 ETag 标头:etag: W/"foobar"
gzip Brotli 解压 Brotli 并向访客返回未压缩响应,带弱 ETag 标头:etag: W/"foobar"
gzip (无) 向访客返回未压缩响应,带强 ETag 标头:etag: "foobar"
gzip, br, zstd Zstandard 向访客返回 zstd 压缩响应,带强 ETag 标头:etag: "foobar"
gzip, br Zstandard 解压 zstd 并向访客返回 br 响应,带弱 ETag 标头:etag: W/"foobar"
zstd Brotli/GZIP 解压 zstd 并向访客返回 zstd 响应,带弱 ETag 标头:etag: W/"foobar"

在 Cloudflare 中启用 Respect Strong ETags(遵循强 ETag) 将自动禁用 Rocket Loader、电子邮件混淆和自动 HTTPS 重写。

禁用"遵循强 ETag"时的行为

禁用 Respect Strong ETags(遵循强 ETag) 时,如果以下所有条件均满足,Cloudflare 将保留源站 Web 服务器设置的强 ETag 标头:

  • 源站服务器发送使用 GZIP 或 Brotli 压缩的响应,或未压缩的响应。
  • 如果源站服务器发送压缩响应,访客根据 accept-encoding 标头接受相同的压缩方式(GZIP、Brotli)。
  • 已禁用 Rocket Loader电子邮件混淆功能。

在所有其他情况下,Cloudflare 将把强 ETag 标头转换为弱 ETag 标头或删除强 ETag。例如,在以下条件下:

  • 已禁用 Respect Strong ETags(遵循强 ETag)
  • 已启用 Brotli 压缩
  • 源站服务器的响应包含 etag: "foobar" 强 ETag 标头

Cloudflare 网络将根据访客的 accept-encoding 标头和源站服务器响应中使用的压缩方式采取以下操作:

访客发送的 accept-encoding
标头
源站服务器响应中使用的压缩 Cloudflare 操作
gzip, br GZIP 解压 GZIP 并向访客返回 Brotli 压缩响应(因为已启用 Brotli 压缩),带弱 ETag 标头:etag: W/"foobar"
gzip, br Brotli 向访客返回 Brotli 压缩响应,带强 ETag 标头:etag: "foobar"
br GZIP 解压 GZIP 并向访客返回 Brotli 压缩响应,带弱 ETag 标头:etag: W/"foobar"
gzip Brotli 解压 Brotli 并向访客返回 GZIP 压缩响应,带弱 ETag 标头:etag: W/"foobar"
gzip (无) 使用 GZIP 压缩源站响应并返回给访客,带弱 ETag 标头:etag: W/"foobar"
gzip, br, zstd Zstandard 向访客返回 zstd 压缩响应,带强 ETag 标头:etag: "foobar"
gzip, br Zstandard 解压 zstd 并向访客返回未压缩响应,带弱 ETag 标头:etag: W/"foobar"
zstd Brotli 解压 zstd 并向访客返回未压缩响应,带弱 ETag 标头:etag: W/"foobar"

有关更多信息,请参阅内容压缩

重要说明

  • 强 ETag 标头中的值必须使用双引号(例如 etag: "foobar")。如果格式不正确,Cloudflare 将删除 ETag 标头,而不是将其转换为弱 ETag。

  • 如果资源可缓存且发生缓存未命中,Cloudflare 不会向源站服务器发送 ETag 标头。这是因为 Cloudflare 需要完整的响应正文来填充其缓存。

  • 如果您的源站(或 R2)根据 accept-encoding 应用压缩,第一种压缩类型将被缓存。请考虑强 ETag 是否适合您的使用场景,或使用缓存键规则来处理不同的压缩类型。

这篇文档对您有帮助吗?