CloudFlare上未遵循Cache-Control标头

时间:2016-01-20 21:25:38

标签: caching nginx cache-control cloudflare

我试图让一些html页面被缓存,就像通过CloudFlare自动缓存图像一样,但我无法让CloudFlare真正点击其html的缓存。

根据文档(参考:https://support.cloudflare.com/hc/en-us/articles/202775670-How-Do-I-Tell-CloudFlare-What-to-Cache-),可以将Cache-Control设置为publicmax-age大于0的任何内容进行缓存。

我在我的原始Nginx服务器上尝试了各种标头组合而没有成功。从简单的Cache-Control: public, max-age=31536000到更复杂的标头,包括s-maxage=31536000Pragma: publicETag: "569ff137-6"Expires: Thu, 31 Dec 2037 23:55:55 GMT,但没有任何结果。

强制CloudFlare从缓存中提供html页面的任何想法?

PS:我在图片上获得CF-Cache-Status: HIT并且它工作正常,但在html网页上没有任何内容,甚至不是CF-Cache-Status: something。使用针对html页面的CloudFlare页面规则,它似乎工作正常,但我想避免使用它,主要是因为它太CloudFlare特定。我不会在这些页面上提供cookie或任何动态。

3 个答案:

答案 0 :(得分:5)

现在可以让Cloudflare尊重您的Web服务器标头,而不是使用浏览器缓存TTL设置中描述的最小值来覆盖它们。

首先导航到Cloudflare仪表板中的缓存选项卡:

Cloudflare Dashboard Caching tab

从这里,您可以向下滚动到"浏览器缓存过期"设置,从这里您可以选择"尊重现有标题"下拉列表中的选项:

Respect Existing Headers Cloudflare

进一步阅读:

注意:如果未选择此设置,Cloudflare将至少将默认的4小时应用于Cache-Control标头。设置此设置后,Cloudflare将不会触及您的Cache-Control标头(即使它们处于低位或根本没有设置)。

答案 1 :(得分:3)

我也偶然发现了这一点。从页面上说

专业提示:从您的来源发送缓存指令以获取具有我们默认不会缓存的扩展程序的资源将完全没有区别。要指定我们默认不缓存的扩展程序的来源的缓存持续时间,您必须创建一个页面规则以“缓存所有内容”。

因此,您似乎必须设置一个页面规则,以便将此文件用于CloudFlare默认不缓存的文件。本页更详细地描述了这一点,

https://blog.cloudflare.com/edge-cache-expire-ttl-easiest-way-to-override/

那说它仍然没有为我工作,似乎没有得到支持。在联系他们的支持后,他们确认了Respect Origin Header已从所有计划类型中删除。因此,如果您没有页面规则,他们将尊重原始标题。

然而,这对于为html页面命中其边缘缓存没有任何帮助。为此,您已设置页面规则。一旦完成,我相信您可以将您的最大年龄设置为您的计划允许的最低限度。任何更低,它被覆盖。也就是说,没有页面规则你可以说Cache-Control:max-age:30并且它会通过。使用包含边缘缓存的页面规则,即使页面规则未指定浏览器缓存,最大时间也会受到计划允许的最短时间的限制。

答案 2 :(得分:0)

CF文件非常不清楚。进入“页面规则”,并根据通配符定义启用缓存的规则 - 然后它将起作用。

相关问题