【发布时间】:2020-10-25 14:26:05
【问题描述】:
我正在使用 Google Cloud CDN 缓存 HTML 页面。
我已经按照文档配置了所有正确的标题,并且页面缓存良好。现在,我想更改它,使其仅在请求没有 cookie 时缓存,即没有 cookie 标头集。
我的理解是,这只是更改我的源服务器以将vary: cookie 标头添加到页面的所有 响应的情况,然后仅添加缓存标头Cache-Control: public 和@987654326 @ 当请求中没有设置cookie 标头时。
但是,这不起作用。使用curl,我可以看到所有缓存标头,vary: cookie 标头,在我发送带和不带 cookie 的请求时都按预期设置,但我从来没有在没有 cookie 的请求上获得缓存命中。
深入研究 Cloud CDN 日志,我发现 每个 没有 cookie 标头的请求都有 cacheFillBytes 填充了与响应大小相同的数字 - 而它不适用于带有cookie 标头设置了一个值(如预期的那样)。
所以看起来 Cloud CDN 正在尝试为没有 cookie 的请求按预期填充缓存,只是我从来没有得到缓存 hit - 即每次都只是cacheFillBytes,@ 987654334@ 永远不会出现在日志中。
有没有人遇到过类似的事情?我已经对我所有的标头进行了三次检查是否有拼写错误,实际上,仅删除 vary: cookie 标头就可以使缓存按预期工作,所以我几乎可以肯定我的配置在标头和 Cloud CDN 认为可缓存的内容方面是正确的。
Cloud CDN 是否应该像我期望的那样处理 vary: cookie?文档建议它处理任意变化的标头。如果是这样,为什么我会在 每个 请求中看到 cacheFillBytes,并在响应中设置 Cache-Control: public 和 Cache-Control: max-age=300,但在任何后续请求中都不会看到 cacheHit: true(我我试过用curl 在一个循环中触发数百个,它真的从来没有命中,不仅仅是我填充了几个不同的边缘缓存)?
【问题讨论】:
-
变化:不支持将 Cookie 作为缓存键 - 使用内容时不会缓存内容,因为每个用户的 Cookie 值通常是唯一的。请参阅cloud.google.com/cdn/docs/caching#vary_headers,它暗示仅支持一组 Vary 标头。
-
@elithrar 谢谢 - 我想知道是不是这样,但措辞模棱两可
Responses with Vary headers are cached only if the header has one of the values listed in Cacheable content- 但是Cachable content 中根本没有提到 Vary - 你碰巧知道它是否说明在文档中明确支持和不支持不同标题的任何地方?
标签: cookies google-cloud-platform google-cloud-cdn vary