Cloudfront - 为什么这不是 "browser cached"?

Cloudfront - why is this not being "browser cached"?

这是对我的 Javascript 文件的 curl -I 回复:

    HTTP/1.1 200 OK
    Content-Type: text/javascript
    Content-Length: 72640
    Connection: keep-alive
    Date: Sat, 18 Feb 2017 16:12:06 GMT
    Cache-Control: 86400
    Last-Modified: Wed, 15 Feb 2017 15:09:28 GMT
    ETag: "a6ee06ff5e49a4290bb2aabe5e0f9029"
    Server: AmazonS3
    Vary: Accept-Encoding
    Age: 1173
    X-Cache: Hit from cloudfront
    Via: 1.1 3b17302562f1709d8b6c9f7be1.cloudfront.net (CloudFront)

我可以在那里看到 Cache-Control 标签。不确定 VaryETag 在做什么,但就这样吧。这是否以某种方式指定用户的浏览器不缓存此文件?为什么 Pingdom 或 Goog PageSpeed 不将其识别为浏览器可缓存文件?

您的 Cache-Control header 存在,但该值实际上无效。正确的格式如下所示:

Cache-Control: max-age=86400

数字本身没有意义。


ETag: 是实体标签——一个不透明的值,唯一标识给定 URL 的当前内容。如果内容发生变化,ETag 也会发生变化。具有缓存副本的浏览器 可以 将此值用于后续请求,通过发送 If-None-Match: 请求 return 请求服务器仅 return 内容不同=31=],包括 last-seen ETag。

Vary: 告诉浏览器对请求的某些更改可能会产生不同的响应。与浏览器不同,除非您指定 --compressed 选项,否则 curl 不会宣传其支持 gzip 有效负载的能力。在调用 curl 时添加该选项会触发向请求添加 Accept-Encoding: gzip,如果您在 CloudFront 中启用了该选项,则 可能 会触发响应被压缩。