【问题标题】:Google Cloud CDN vary:cookie response never gets cache hit谷歌云 CDN 变化:cookie 响应永远不会被缓存命中
【发布时间】: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: publicCache-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


【解决方案1】:

根据 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

【讨论】:

  • 文档这么说,但它似乎不起作用。你见过它在实践中工作吗?同样关于后一部分,我实际上不希望 any 设置了cookie 的请求从缓存中获取,只有那些没有设置cookie 的请求。
  • 根据我对您提供的信息的理解,您似乎无法使用应按文档 [1] 中所示工作的 vary:cookie 来实现缓存。要进一步调查此案例或进一步排除故障,我建议您将案例提交给 PIT(公共问题跟踪器),因为这将是最佳选择。我注意到您已经创建了一个 PIT[2]。我建议关注该线程以查看问题的原因。 [1]cloud.google.com/cdn/docs/caching#vary_headers [2]issuetracker.google.com/160497556
【解决方案2】:

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

vary: cookie受 Cloud CDN 支持

文档是updated - 唯一可以与vary 一起使用的标头是AcceptAccept-EncodingOrigin

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2023-04-02
    • 2020-12-31
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    相关资源
    最近更新 更多