我正在尝试缓存一些html页面,就像通过CloudFlare自动缓存图像一样,但是我无法让CloudFlare实际命中它的html缓存。
根据文档(引用:https://support.cloudflare.com/hc/en-us/articles/202775670-How-Do-I-Tell-CloudFlare-What-to-Cache-),可以将Cache-Control设置为public
且max-age
大于0的任何内容进行高速缓存。
我尝试在源Nginx服务器上使用各种 header 组合,但均未成功。从简单的Cache-Control: public, max-age=31536000
到更复杂的 header ,包括s-maxage=31536000
,Pragma: public
,ETag: "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或任何动态信息。
最佳答案
现在可以让Cloudflare尊重您的Web服务器头,而不用浏览器缓存TTL设置中所述的最小值覆盖它们。
首先,导航到Cloudflare仪表板中的“缓存”选项卡:
从这里您可以向下滚动到“浏览器缓存过期”设置,从这里您可以在下拉列表中选择“尊重现有标题”选项:
进一步阅读:
注意:如果未选择此设置,则Cloudflare将对Cache-Control header 至少应用默认的4小时。设置此设置后,Cloudflare将不会触摸您的Cache-Control header (即使它们太低或根本没有设置)。
关于caching - CloudFlare上不遵守缓存控制 header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34910872/