詳解瀏覽器緩存機制與Apache設置緩存

 

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

相關文章
相關標籤/搜索