我正在使用 Google Cloud CDN 缓存 HTML 页面。
我已经根据文档配置了所有正确的标题,并且页面缓存很好。现在,我想更改它,使其仅在请求没有 cookie 时缓存,即没有cookie
设置标头。
我的理解是,这只是更改我的源服务器以向页面的所有vary: cookie
响应添加标头,然后仅添加缓存标头并且在请求上没有设置标头的情况。Cache-Control: public
Cache-Control: max-age=300
cookie
但是,这不起作用。使用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: public
并Cache-Control: max-age=300
设置响应,但cacheHit: true
在任何后续请求中都curl
看不到 a正在填充几个不同的边缘缓存)?