1

我正在使用 Google Cloud CDN 缓存 HTML 页面。

我已经根据文档配置了所有正确的标题,并且页面缓存很好。现在,我想更改它,使其仅在请求没有 cookie 时缓存,即没有cookie设置标头。

我的理解是,这只是更改我的源服务器以向页面的所有vary: cookie响应添加标头,然后仅添加缓存标头并且在请求上没有设置标头的情况。Cache-Control: publicCache-Control: max-age=300cookie

但是,这不起作用。使用curl我可以看到,vary: cookie当我发送带有和不带有 cookie 的请求时,所有缓存标头(标头)都按预期设置,但我从来没有在没有 cookie 的请求上获得缓存命中。

深入研究 Cloud CDN 日志,我看到每个没有cookie标头的请求都cacheFillBytes填充了与响应大小相同的数字 - 而不是针对cookie标头设置了值的请求(如预期的那样)。

因此,看起来 Cloud CDN 正在尝试按预期填充没有 cookie 的请求的缓存,只是我从来没有收到缓存命中- 即cacheFillBytes每次都cacheHit: true没有出现在日志中。

有没有人遇到过类似的事情?我已经三重检查了我所有的标头是否有错别字,实际上只是删除vary: cookie标头就可以使缓存按预期工作,所以我几乎可以肯定我的配置在标头和 Cloud CDN 认为可缓存的内容方面是正确的。

Cloud CDN 是否应该vary: cookie像我期望的那样处理?文档建议它处理任意变化的标头。如果是这样,为什么我会cacheFillBytes每个请求上看到Cache-Control: publicCache-Control: max-age=300设置响应,但cacheHit: true在任何后续请求中都curl看不到 a正在填充几个不同的边缘缓存)?

4

2 回答 2

1

我向 Google 提交了一个错误,结果证明文档确实是错误的。

vary: cookieCloud CDN不支持

文档已更新- 唯一可以与和vary一起使用Accept的标题。Accept-EncodingOrigin

于 2020-08-18T05:19:37.760 回答
0

根据 GCP 文档 [1],我们获悉 Cloud CDN 尊重源服务器在响应中包含的任何 Vary 标头。根据此信息,GCP Cloud CDN 支持vary:cookie,因为源服务的任何Vary 标头都将受到Cloud CDN 的尊重。请记住,这将对缓存产生负面影响,因为 Vary 标头表明响应会根据客户端的请求标头而变化。因此,如果对对象的请求具有请求标头 Cookie:abc,则不会从缓存中提供对具有请求标头 Cookie:xyz 的同一对象的后续请求。因此,是的,它受支持和尊重,但会影响缓存(https://cloud.google.com/cdn/docs/troubleshooting-steps?hl=en#low-hit-rate)。

[1]https://cloud.google.com/cdn/docs/caching#vary_headers

于 2020-07-07T22:45:11.983 回答