Google Cloud CDN vary:cookie 响应永远不会命中缓存
Google Cloud CDN vary:cookie response never gets cache hit
我正在使用 Google Cloud CDN 来缓存 HTML 页面。
我已经按照文档配置了所有正确的 header,页面缓存正常。现在,我想更改它,以便它仅在请求没有 cookie 时缓存,即没有设置 cookie
header。
我的理解是,这只是更改我的源服务器以添加 vary: cookie
header 到 all 页面响应的情况,然后仅在请求中未设置 cookie
header 时添加缓存 headers Cache-Control: public
和 Cache-Control: max-age=300
。
但是,这不起作用。使用 curl
我可以看到所有缓存 headers,vary: cookie
header,在我发送带有和不带 cookie 的请求时都按预期设置,但是我 从不 在没有 cookie 的情况下获取缓存命中。
深入研究 Cloud CDN 日志,我看到 每个 没有 cookie
的请求 header 都有 cacheFillBytes
填充了相同的数字作为响应大小 - 而它不适用于 cookie
header 设置了值(如预期)的请求。
因此,对于没有 cookie 的请求,Cloud CDN 似乎正在尝试按预期填充缓存,只是我从未获得缓存 hit - 即只是 cacheFillBytes
每次,cacheHit: true
从未出现在日志中。
有没有人遇到过类似的事情?我 triple-checked 我所有的 header 都是为了拼写错误,实际上只是删除 vary: cookie
header 使缓存按预期工作,所以我几乎可以肯定我的配置是正确的根据 headers 和 Cloud CDN 认为可缓存的内容。
Cloud CDN 是否应该像我期望的那样处理 vary: cookie
?文档建议它处理任意变化 headers。如果是这样,为什么我会在 每个 请求上看到 cacheFillBytes
,并在响应中设置 Cache-Control: public
和 Cache-Control: max-age=300
,但再也看不到 cacheHit: true
对任何后续请求(我已经尝试在循环中用 curl
触发数百次,它真的从来没有命中,这不仅仅是我填充了几个不同的边缘缓存)?
根据 GCP 文档[1],Cloud CDN 会尊重源服务器在响应中包含的任何 Vary header。根据此信息,GCP 云 CDN 似乎支持 vary:cookie,因为云 CDN 将尊重源服务的任何变化 header。请记住,这会对缓存产生负面影响,因为 Vary header 表示响应会根据客户端的请求 headers 而变化。因此,如果对 object 的请求具有请求 header Cookie: abc,则对具有请求 header Cookie: xyz 的相同 object 的后续请求将不会从cache.So,是的,它受到支持和尊重,但会影响缓存 (https://cloud.google.com/cdn/docs/troubleshooting-steps?hl=en#low-hit-rate)。
[1]https://cloud.google.com/cdn/docs/caching#vary_headers
我用 Google 提交了一个错误,事实证明,文档确实是错误的。
Cloud CDNvary: cookie
不支持
文档已 updated - 唯一可以与 vary
一起使用的 headers 是 Accept
、Accept-Encoding
和 Origin
.
我正在使用 Google Cloud CDN 来缓存 HTML 页面。
我已经按照文档配置了所有正确的 header,页面缓存正常。现在,我想更改它,以便它仅在请求没有 cookie 时缓存,即没有设置 cookie
header。
我的理解是,这只是更改我的源服务器以添加 vary: cookie
header 到 all 页面响应的情况,然后仅在请求中未设置 cookie
header 时添加缓存 headers Cache-Control: public
和 Cache-Control: max-age=300
。
但是,这不起作用。使用 curl
我可以看到所有缓存 headers,vary: cookie
header,在我发送带有和不带 cookie 的请求时都按预期设置,但是我 从不 在没有 cookie 的情况下获取缓存命中。
深入研究 Cloud CDN 日志,我看到 每个 没有 cookie
的请求 header 都有 cacheFillBytes
填充了相同的数字作为响应大小 - 而它不适用于 cookie
header 设置了值(如预期)的请求。
因此,对于没有 cookie 的请求,Cloud CDN 似乎正在尝试按预期填充缓存,只是我从未获得缓存 hit - 即只是 cacheFillBytes
每次,cacheHit: true
从未出现在日志中。
有没有人遇到过类似的事情?我 triple-checked 我所有的 header 都是为了拼写错误,实际上只是删除 vary: cookie
header 使缓存按预期工作,所以我几乎可以肯定我的配置是正确的根据 headers 和 Cloud CDN 认为可缓存的内容。
Cloud CDN 是否应该像我期望的那样处理 vary: cookie
?文档建议它处理任意变化 headers。如果是这样,为什么我会在 每个 请求上看到 cacheFillBytes
,并在响应中设置 Cache-Control: public
和 Cache-Control: max-age=300
,但再也看不到 cacheHit: true
对任何后续请求(我已经尝试在循环中用 curl
触发数百次,它真的从来没有命中,这不仅仅是我填充了几个不同的边缘缓存)?
根据 GCP 文档[1],Cloud CDN 会尊重源服务器在响应中包含的任何 Vary header。根据此信息,GCP 云 CDN 似乎支持 vary:cookie,因为云 CDN 将尊重源服务的任何变化 header。请记住,这会对缓存产生负面影响,因为 Vary header 表示响应会根据客户端的请求 headers 而变化。因此,如果对 object 的请求具有请求 header Cookie: abc,则对具有请求 header Cookie: xyz 的相同 object 的后续请求将不会从cache.So,是的,它受到支持和尊重,但会影响缓存 (https://cloud.google.com/cdn/docs/troubleshooting-steps?hl=en#low-hit-rate)。
[1]https://cloud.google.com/cdn/docs/caching#vary_headers
我用 Google 提交了一个错误,事实证明,文档确实是错误的。
Cloud CDNvary: cookie
不支持
文档已 updated - 唯一可以与 vary
一起使用的 headers 是 Accept
、Accept-Encoding
和 Origin
.