5

您应该使用 CloudFlare 在您的 PHP 站点上使用哪些缓存标头,以便“始终在线”工作并且您的图像被他们的 CDN 缓存?

CloudFlare 的文档很糟糕,他们的支持团队似乎并不知道。

4

3 回答 3

3

如果您希望 Always Online(以及我们的许多缓存)正常工作,您肯定不希望有无缓存和私有标头。

“你的图片被他们的 CDN 缓存了?” 我们通过文件扩展名自动缓存现场资源(显然,我们不会缓存场外资源,例如 Flickr 或 Facebook 小部件)。

注意:Always Online 确实有一些限制,我们的文档(服务器响应代码等)中概述了所有这些限制。如果您只是最近才将该站点添加到 CloudFlare,那么缓存中将不会显示任何内容(Always Online 爬虫会在特定时间退出)。

Always Online 的未来迭代将允许用户“固定”特定页面,这将(希望)消除我们目前的一些限制。

于 2012-11-09T01:29:05.173 回答
2

通常,您不需要做任何事情——大多数“正常”的 Web 服务器将使用适当的静态缓存标头提供静态内容。但是,如果您指定自己的或由于某种原因您的服务器正在发送导致静态内容不被缓存的标头,您将需要覆盖或删除任何阻止内容被缓存的标头。

使用可以查看内容标题的程序(Firefox 中 Firebug 的“Net”选项卡,网站http://web-sniffer.net/或类似网站)查看您的内容当前具有哪些标题。检查诸如“Cache-Control”和“Expires”之类的东西。如果内容具有阻止缓存或已经过期的缓存控制标头,这可能会阻止 Cloudflare(和任何其他缓存)缓存它,您将需要删除或更改它们。

作为一个非常普遍的规则,要允许缓存某些内容,请指定将来某些内容的 Expires 时间,以及具有 max-age=某个时间的 public 的 Cache-Control,但是您发送的标头将取决于你在服务什么,你使用什么服务器,客户端是什么,等等。

无需学习和理解各种缓存标头的最简单方法可能是使用http://web-sniffer.net/之类的东西来查看缓存的其他内容,然后复制其标头。例如,http://web-sniffer.net/?url=ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js

请注意,根据我的经验,Always Online 通常不起作用。

// set the most basic caching headers in PHP (cache for 1 month)
header('Cache-Control: public');
header('Expires: '.gmdate('D, d M Y H:i:s', strtotime('+1 month')).' GMT');

有关简要说明,请参阅http://hardanswers.net/dynamic-webpage-caching

于 2012-10-16T23:53:40.727 回答
1

使用“公共”作为缓存控制对我来说是个问题,因为我的大多数页面都是非常动态的(网上商店)。这就是为什么我只告诉 CloudFlare 进行缓存。

Cloudflare 使用Mozilla/5.0(兼容;CloudFlare-AlwaysOnline/1.0;+http://www.cloudflare.com/always-online)作为用户代理。您可以告诉 CloudFlare 使用 PHP 或 .htaccess 缓存您的页面(请参阅 Ned Martin 的解决方案),但告诉其他访问者不要缓存您的页面。

于 2012-10-23T21:14:19.040 回答