首页 > 解决方案 > 谷歌云 CDN 变化:cookie 响应永远不会被缓存命中

问题描述

我正在使用 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正在填充几个不同的边缘缓存)?

标签: cookiesgoogle-cloud-platformgoogle-cloud-cdnvary

解决方案


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

vary: cookieCloud CDN不支持

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


推荐阅读