错误的 cache-control headers 从 Google Cloud Storage / Google Cloud CDN 静态网站传送 - 如何修复?

Wrong cache-control headers delivered from Google Cloud Storage / Google Cloud CDN static website - how to fix?

我有一个静态网站托管在 Google 云存储中的存储桶上,前面有 Google 云 CDN。该站点上有许多 pictures with inspirational quotes

PageSpeed Insights 表示他们需要一个有效的缓存策略:

但是我在我的所有图像上设置了一年的缓存时间 (Cache-Control:"Cache-Control:public,max-age=31536000")使用 gsutil 将它们上传到我的存储桶。

如果我去存储桶检查,它说它们设置正确:

如果我检查 Google Cloud CDN 的设置,也将全面设置为一年:

但是 PageSpeed Insights 说:

Serve static assets with an efficient cache policy 15 resources found A long cache lifetime can speed up repeat visits to your page.

我检查了通过 Chrome 开发工具提供的实际响应 headers,它们看起来不错:

accept-ranges: bytes
age: 46890
alt-svc: clear
cache-control: Cache-Control:public,max-age=31536000,public
content-language: en
content-length: 10008
content-type: image/webp
date: Tue, 25 Jan 2022 06:16:37 GMT
etag: "36fd43e7d25b661ac7172364222c3d5c"
last-modified: Mon, 24 Jan 2022 21:41:02 GMT
server: UploadServer
x-goog-generation: 1643060462624518
x-goog-hash: crc32c=6URgQQ==
x-goog-hash: md5=Nv1D59JbZhrHFyNkIiw9XA==
x-goog-metageneration: 1
x-goog-storage-class: STANDARD
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 10008
x-guploader-uploadid: ADPycds_8JRi-oDTLk2qZyVndksOR3St2XzntoPRTq-56j6QQNI3ebAzS1h4FkuifRhOiJcLRYq-Lo2cNmTpnzHVnsE

尽管请求 Headers 没有:

    :authority: discoverquotes.com
:method: GET
:path: /love/love-titlepin400.webp
:scheme: https
accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: no-cache
cookie: _ga=GA1.1.445449550.1642877186; _ga_8WVC1J4HD6=GS1.1.1643137529.32.1.1643137574.0
pragma: no-cache
referer: https://discoverquotes.com/
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
sec-fetch-dest: image
sec-fetch-mode: no-cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36

但这只是响应headers我能控制对吗?我真的不知道 Request Headers PageSpeed Insights 在获取请求时设置了什么,对吧?或者?

我在 Whosebug 上看到这个问题:

但看不到如何修复正在发送的请求 headers? PageSpeed Insights 是自己获取页面还是使用我的浏览器?

我很困惑。有关调试、了解更多信息或修复的建议?

问题似乎是您在 Cache-Control 配置字段中写入了短语 Cache-Control,导致它在响应 header 中出现两次,使其无效。大概将其设置为简单的 public, max-age=31536000 将使结果 header 有效。

不要担心 Cache-Control header 的请求,你无法控制它们。他们可能是这样设置的,因为开发工具通常会关闭缓存。