Amazon web services 为什么CloudFront可以';压缩前不保存ETag?

Amazon web services 为什么CloudFront可以';压缩前不保存ETag?,amazon-web-services,amazon-cloudfront,cdn,Amazon Web Services,Amazon Cloudfront,Cdn,CloudFront说明: 如果将CloudFront配置为压缩内容,CloudFront将从压缩的文件中删除ETag响应头。当ETag头存在时,CloudFront和您的源站可以使用它来确定CloudFront edge缓存中的文件版本是否与源站服务器上的版本相同。但是,经过压缩后,这两个版本不再相同。因此,当压缩文件过期并且CloudFront将另一个请求转发给您的源站时,您的源站总是将文件返回到CloudFront,而不是HTTP状态代码304(未修改) 为什么不CloudFront在压缩

CloudFront
说明:

如果将CloudFront配置为压缩内容,CloudFront将从压缩的文件中删除ETag响应头。当ETag头存在时,CloudFront和您的源站可以使用它来确定CloudFront edge缓存中的文件版本是否与源站服务器上的版本相同。但是,经过压缩后,这两个版本不再相同。因此,当压缩文件过期并且CloudFront将另一个请求转发给您的源站时,您的源站总是将文件返回到CloudFront,而不是HTTP状态代码304(未修改)


为什么不
CloudFront
在压缩之前保存文件的
ETag
,并将其用于原始请求,以允许使用304代码?

文档的相应部分已更新

如果您的源站包含一个强大的
ETag
(例如S3),CloudFront将压缩内容(如果它被配置为压缩内容,例如文本或json),它将按照规范的要求(参见第13.3.3节)削弱
ETag
(例如
“foobar”
变成
W/“foobar”
)并将其传递给观众

可以存储它并在以后用于条件请求(
如果没有匹配:W/“foobar”

ETag收割台

当源站的未压缩对象包含有效的强ETag HTTP头时,CloudFront将转换强ETag头 值转换为弱ETag,并将弱ETag值返回给查看器。 查看者可以存储弱ETag值并使用它发送条件消息 具有If-None的请求与HTTP头匹配。这让观众,, CloudFront和处理压缩和未压缩 对象的版本在语义上是等价的,这减少了 不必要的数据传输


作为一个建议,很明显,如果ETag被压缩,那么在cloudfront中保存它是没有用的。因此,如果应该使用ETag来优化缓存,则不应该启用cloudfront缓存。似乎有两种不同的方法可以实现相同的目标。