一、詳解瀏覽器緩存機制
對于,如何說明緩存機制,在網絡上找到了兩張圖,個人認為思路是比較清晰的。總結時,上圖。
這里需要注意的有兩點:
1、Last-Modified、Etag是響應頭里的數據
2、If-None-Match、If-Modified-Since是請求頭里的數據
Last-Modified/If-Modified-Since這種搭配,好像已經過時了。在測試時,就是關掉etag,并時間過期了,服務器也照樣返回304。
Etag/If-None-Match這種搭配,還挺好用的。測試時,可用。那就解釋下什么是etag?什么是if-none-match?
etag:當前資源的唯一標識。是文件的索引節、文件大小、文件創建時間組合的hash。
if-none-match:這就是上面etag的copy。但是,請求服務器時,如果發現if-none-match與etag不對應時,就說明文件被修改了,這時返回200,重新獲取文件,沒修改則返回304,繼續使用緩存文件。
好了,可以看流程圖了。
首次訪問頁面時的流程
再次訪問頁面時的流程
第一次看的時候有點蒙,于是,又給裝修了下。再次亮圖。
以上幾張流程圖就很好說了瀏覽器的緩存機制。
二、Apache設置緩存
使用Apache的.htaccess設置緩存有三種方法
第一種方法:
在Apache開啟mod_expires.so模塊
在配置文件中打開:LoadModule expires_module modules/mod_expires.so
在.htaccess添加以下內容
#打開緩存ExpiresActive On#默認對所有資源緩存600秒ExpiresDefault A600#png格式的資源緩存5秒ExpiresByType image/png A5#jpg格式的資源緩存50秒ExpiresByType image/jpg A50
#好含這些后綴的資源,都緩存100秒
ExpiresDefault A100
第二種方法:
在Apache開啟mod_headers模塊
去配置文件中添加以下內容:
LoadModule headers_module modules/mod_headers.so
在.htaccess中添加內容:
#包含這些后綴的資源都緩存33秒
Header set Cache-Control "max-age=33"
第三種方法:
在.htaccess添加以下內容:
FileEtag INode Mtime Size
要關閉etag,則添加以下內容:
FileEtag none
經過測試,這幾種方法同時使用,則會出現優先級:
第三種方法>第二種方法>第一種方法
還發現了一些小知識,Apache不緩存能解析的資源文件,比如php、php3等。如果修改配置文件,致使可以解析jpg格式的文件,那就不能緩存jpg格式的文件。可在配置文件中,添加以下代碼,做測試:
AddType application/x-httpd-php .jpg