您应该在具有CloudFlare的PHP站点上使用哪些缓存标头,以便“始终在线”工作?

时间:2012-09-27 16:36:06

标签: php caching browser-cache cloudflare

您应该在具有CloudFlare的PHP站点上使用哪些缓存标头,以便" Always Online"工作和你的图像被他们的CDN缓存?

CloudFlare的文档非常糟糕,他们的支持团队似乎也不知道。

3 个答案:

答案 0 :(得分:3)

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

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

注意:永远在线确实有一些限制&所有这些限制都在我们的文档(服务器响应代码等)中列出。如果您最近也将该网站添加到CloudFlare,则无法在缓存中显示任何内容(Always Online爬网程序在特定时间出现)。

Always Online的未来版本将允许用户“固定”特定页面,这将(希望)从图片中获得我们现有的一些限制。

答案 1 :(得分:2)

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

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

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

没有学习和理解各种缓存头的最简单方法可能是使用类似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

答案 2 :(得分:1)

使用'public'作为Cache-Control对我来说是个问题,因为我的大部分页面都非常动态(网店)。这就是为什么我只告诉CloudFlare缓存。

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