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現在:)

「希望幫助:)