2016-01-20 117 views
4

我试图得到一些HTML页面被缓存的Cache-Control头,以同样的方式图像将自动通过CloudFlare的缓存,但我不能让CloudFlare的实际命中缓存为HTML。不尊重上CloudFlare的

根据文档(参考文献: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。我没有在这些网页上提供cookies或任何动态内容。

回答

5

现在可以让Cloudflare尊重您的Web服务器标题,而不是使用Browser Cache TTL设置中描述的最低标准覆盖它们。

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

Cloudflare Dashboard Caching tab

从这里你可以向下滚动到“浏览器缓存过期”的设置,从这里可以选择“尊重现有的头”选项下拉:

Respect Existing Headers Cloudflare

延伸阅读:

注:如果不选择该选项,CloudFlare的将应用的默认值4小时最低到缓存控制头。设置此设置后,Cloudflare将不会触及您的Cache-Control标头(即使它们很低或根本不设置)。

0

的CF文档是很清楚。进入“页面规则”,并根据通配符定义打开缓存的规则 - 然后它将起作用。

2

我无意中发现了这一点。从它说的页面

专业提示:从您的来源发送缓存指令的资源与我们不默认缓存的扩展将绝对没有区别。要为默认情况下我们不缓存的扩展指定缓存持续时间,您必须创建一个页面规则来“缓存所有内容”。

这样看来,你必须设定一个页面规则来使用这个对于CloudFlare的默认情况下不缓存文件。本页面描述得更详细些,

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

尽管如此它仍然没有工作对我来说并没有出现支持。他们在联系他们的支持后证实了这一点尊重原始标题已从所有计划类型中删除。所以如果你没有页面规则,他们会尊重原始页眉。

但是,这并不能帮助他们找到HTML页面的边缘缓存。为此你已经设置了一个页面规则。一旦完成,我相信您可以将您的最大年龄设置为低于您的计划允许的最低年龄。任何更低,它会被覆盖。也就是说,在没有页面规则的情况下,你可以说Cache-Control:max-age:30并且它会通过。使用包含边缘缓存最大年龄的页面规则,即使页面规则未指定浏览器缓存,您的计划仍允许最短时间。

+1

我有一张关于此权利的公开门票。似乎不可能做到像在所有URL上尊重缓存标题一样简单。要么你不包括一个页面规则,这意味着只有样式表等才被缓存,关于源头的标题,或者你创建了一个简单的“缓存所有”页面规则,并突然忽略源标题! – mahemoff

+0

不完全忽略。只是忽略了它们比你的计划允许的程度要短。 –