2012-01-11 78 views
1

似乎在某些測試中,Firefox不會緩存動態生成(或從緩存serverside加載)的圖像。瀏覽器未緩存生成的圖像

demonstration1 demonstration2

我試圖用頭啓用緩存:

$expires = 60*60*24*14; 
header("Pragma: public"); 
header("Cache-Control: maxage=".$expires); 
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT'); 

,但無濟於事。我仍然得到「200 OK」而不是「304 Not Modified」。

尋找一個使用Stackoverflow上的搜索的答案,我發現了一個暗示,他們寧願將瀏覽器直接重定位到圖像。

像:

header("Location: /img/generated/whatever.png"); 

我不喜歡這個方法,因爲它會導致兩個請求。

任何人都可以幫助我,讓我知道我怎麼才能讓瀏覽器緩存這些文件?

請求URL不變,它不包含任何種子或時間戳。

+0

它是['max-age'](http://tools.ietf.org/html/rfc2616#section-14.9.3)而不是'maxage'。 – Gumbo 2012-01-11 14:25:28

+0

謝謝你的觀察!我改變了它,但不幸的是我仍然得到相同的結果。 – SquareCat 2012-01-11 14:33:10

+0

至於304部分:你是否實現了一個合適的緩存機制? – Gumbo 2012-01-11 14:38:13

回答

0

你可以試試其他的方法。如果你不想重新定位你的瀏覽器。您可能會使用.htacess或/和mod_rewrite或其他網絡服務器相關模塊重寫您的URL。例如以下URL:

http://sub.domain.com/img/gen/<param>/.../<paramN>/image.png 

將被轉發(無客戶端重定向)到您的在URL中具有參數值的腳本。這意味着你將只有一個請求。

例子做這樣的事情可以在這裏找到:

+0

感謝您的意見。我不確定這是我所尋找的。基本上我只是想告訴瀏覽器緩存輸出。問題是,如果請求url和輸出在每個請求中保持完全相同,爲什麼不自己做呢? – SquareCat 2012-01-11 14:31:51

0

什麼你缺少這裏是您效應初探頭最後修改的頭。 ex Last-Modified:Wed, 15 Feb 2012 10:07:48 GMT。您可以通過在標題中使用此行來解決此問題。

header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 

,你爲什麼要這樣,因爲瀏覽器使用最後modidfied頭進行比較,如果該文件是不是這樣修改不需要重新下載該文件的原因。 :