2010-06-14 88 views
1

我們的網站剛剛轉換爲由mod_rewrite和php腳本生成。當瀏覽器看起來應該是圖片時,圖片不會緩存。靜態圖像沒有用php生成的頁面緩存

所有圖像格式遵循:

<img src="/images/header.png" /> 

我必須避免腳本完全緩存因爲PHP解析器需要動態地處理每個請求的每個頁面;然而,大圖像的下載開銷在每個單頁負載上都很麻煩。

我會理想地爲「Cache-Control:no-cache,must-revalidate」和「Expires:some_date_in_the_past」提供標頭以強制重新驗證PHP腳本。

爲什麼瀏覽器不會在所有頁面中使用一致的href值來緩存靜態圖像?

+0

因爲你告訴它不要緩存,它必須每次重新驗證?這可能是我讀過的最令人困惑的事情。 – animuson 2010-06-14 20:05:38

回答

2

你可以在你的.htacess文件中告訴你要在哪些文件擴展名上應用某些標題,以便爲靜態內容提供遠期未來的過期標題以及可能希望編寫的動態內容緩存控制無緩存必須重新驗證。

<IfModule mod_deflate.c> 
<FilesMatch "\.(js|css|htm|php)$"> 
SetOutputFilter DEFLATE 
</FilesMatch> 
</IfModule> 

<IfModule mod_expires.c> 
    <FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt)$"> 
     ExpiresActive On 
     ExpiresDefault "access plus 10 years" 
     ExpiresByType image/x-icon A604800 
     Header set Cache-Control "max-age=290304000, public" 
    </FilesMatch> 
</IfModule> 

就像在這個例子中,我添加了一個很遠的將來到期的標題到所有不同的靜態文件匹配。

請注意FileMatch標記和文件擴展名。 .htacess文件保存在應用程序中的任何文件夾中,並將該設置提供給該文件夾。

+0

看起來頭文件正在使用新的.htaccess文件正確發送,但瀏覽器仍在每頁加載中請求圖像。 http://getsoundaround.com/images/icons/icon_email.png GET /images/icons/icon_email.png HTTP/1.1 HTTP/1.1 200 OK 日期:星期一,2010 6月14日21:04: 14 GMT 服務器:Apache/2.2.12(Ubuntu) 最後修改時間:星期二,16十二月2008 11:52:18 GMT Etag:「3602e-1f8-45e28975d0080」 Accept-Ranges:bytes Content-Length: 504 Cache-Control:max-age = 290304000,public 有效期至:2020年6月11日星期四21:04:14 GMT 連接:關閉 Content-Type:image/png – scootklein 2010-06-14 21:10:48