2012-02-07 103 views
2

我在写一个通过HTTP和HTTPS请求文件的库。为了减少对经常请求的URL的流量,我想缓存检索到的文件并尊重它们的缓存设置。用PHP缓存HTTP文件

现在高速缓存期满似乎是一个很难的事情,因为HTTP RFC定义这么多的需要在所有可能的组合进行检查:

  • Expires
  • Cache-Control(与几十个可能的值)
  • Pragma

我可以想像,有人已经写PHP代码,正确实施所有这些东西。它在哪里?

+0

我有一种感觉,PHP不是缓存文件的最佳方式。我试图找到一个解决方案烘焙到服务器,或缓存代理。这里是[Apache的缓存指南](http://httpd.apache.org/docs/2.2/caching.html)。 – grossvogel 2012-02-07 20:14:18

+0

grossvogel,这不幸是不可能的。 – cweiske 2012-02-08 05:18:17

回答

3

使用像Squid,Varnish或Apache mod_cache这样的反向代理可以帮助你解决与缓存相关的HTTP头问题。然而,如果你需要一个完整的PHP版本,你应该遵守缓存控制,然后过期,因为当Cache-Control和Expires在相同的HTTP响应中可用时,Cache-Control优先于“max-age”属性,如http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

如果响应包括一个Expires头和一个最大年龄指令,则最大年龄 指令覆盖Expires头,即使Expires头是更限制性的。 此规则允许源服务器为给定响应提供HTTP/1.1(或更高版本)高速缓存到HTTP/1.0高速缓存的更长时间的到期时间 。如果 某些HTTP/1.0缓存不正确地计算年龄或到期时间,这可能很有用,这可能是由于 时钟不同步造成的。

你也应该非常小心的“无缓存”的属性,它是一种误导,因为它需要与原始服务器重新验证,所以它有点像一个“存储,但-DO-NO从高速缓存无重新验证“头。

也可以忽略该附注头有两个原因:

  • 它是一个请求头,而不是一个响应头
  • 它为HTTP 1.0和(几乎整个)世界是HTTP 1.1现在:)

“希望帮助:)