1、詳解瀏覽器緩存機制php
對於,如何說明緩存機制,在網絡上找到了兩張圖,我的認爲思路是比較清晰的。總結時,上圖。html
這裏須要注意的有兩點:瀏覽器
一、Last-Modified、Etag是響應頭裏的數據緩存
二、If-None-Match、If-Modified-Since是請求頭裏的數據服務器
Last-Modified/If-Modified-Since這種搭配,好像已通過時了。在測試時,就是關掉etag,並時間過時了,服務器也照樣返回304。網絡
Etag/If-None-Match這種搭配,還挺好用的。測試時,可用。那就解釋下什麼是etag?什麼是if-none-match?app
etag:當前資源的惟一標識。是文件的索引節、文件大小、文件建立時間組合的hash。xss
if-none-match:這就是上面etag的copy。可是,請求服務器時,若是發現if-none-match與etag不對應時,就說明文件被修改了,這時返回200,從新獲取文件,沒修改則返回304,繼續使用緩存文件。測試
好了,能夠看流程圖了。spa
首次訪問頁面時的流程
再次訪問頁面時的流程
第一次看的時候有點蒙,因而,又給裝修了下。再次亮圖。
以上幾張流程圖就很好說了瀏覽器的緩存機制。
2、Apache設置緩存
使用Apache的.htaccess設置緩存有三種方法
第一種方法:
在Apache開啓mod_expires.so模塊
在配置文件中打開:LoadModule expires_module modules/mod_expires.so
在.htaccess添加如下內容
<IfModule mod_expires.c>
#打開緩存
ExpiresActive On
#默認對全部資源緩存600秒
ExpiresDefault A600
#png格式的資源緩存5秒
ExpiresByType image/png A5
#jpg格式的資源緩存50秒
ExpiresByType image/jpg A50
#好含這些後綴的資源,都緩存100秒
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
ExpiresDefault A100
</FilesMatch>
</IfModule>
第二種方法:
在Apache開啓mod_headers模塊
去配置文件中添加如下內容:
LoadModule headers_module modules/mod_headers.so
在.htaccess中添加內容:
#包含這些後綴的資源都緩存33秒
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">
Header set Cache-Control "max-age=33"
</FilesMatch>
第三種方法:
在.htaccess添加如下內容:
FileEtag INode Mtime Size
要關閉etag,則添加如下內容:
FileEtag none
通過測試,這幾種方法同時使用,則會出現優先級:
第三種方法>第二種方法>第一種方法
還發現了一些小知識,Apache不緩存能解析的資源文件,好比php、php3等。若是修改配置文件,導致能夠解析jpg格式的文件,那就不能緩存jpg格式的文件。可在配置文件中,添加如下代碼,作測試:
AddType application/x-httpd-php .jpg
參考網頁:
http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html
http://my.oschina.net/leejun2005/blog/369148
http://yixun.yxsss.com/yw13.html