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


 

一、詳解瀏覽器緩存機制

  對於,如何說明緩存機制,在網絡上找到了兩張圖,個人認為思路是比較清晰的。總結時,上圖。

  這里需要注意的有兩點:

     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添加以下內容

<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

 

 

    

 

 

 

 

 

   

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM