標籤:
HTTP協議控制瀏覽器緩衝
2015.01.25 SilenceHurts
當我們瀏覽網站的圖片時,按下F12監控,很容易就發現,當我們第一次瀏覽該圖片時,瀏覽器返回的代碼是200,即請求正常,此時,不懂任何東西,我們按下F5重新整理頁面,注意,我們會發現監控下的代碼返回不再是200,而是現實304 Not Modifid,即未修改。
原因:第一次我們訪問圖片時,是正常的,而第二次訪問時現實304,因為此時我們瀏覽器發現頁面未發生更改,此時使用的是本地的緩衝,而並非伺服器返回的代碼,加快了速度。
設定伺服器緩衝
若某網站有N台快取服務器,其與主機伺服器鍵使用HTTP協議的cache-control來控制哪些東西該緩衝,哪些東西不需要緩衝.
具體用法:
1.開啟Apache伺服器的mod_expires.so模組
????LoadModule expires_module modules/mod_expires.so
????重啟伺服器 httpd –k restart
2.在需要設在緩衝的目錄中建立 .htaccess檔案
並且添加: 第7,8兩行
ExpiresActive On????????????//開啟緩衝
ExpiresByType image/png "access plus 30 seconds"????//針對png圖片,緩衝生命週期30s
?
?
基本文法:
ExpiresDefault "<base> [plus] { <num> <type>}"
ExpiresByType type/encoding "<base> [plus] { <num> <type>}"
?
參數:????????
base: 設定基於哪個時間來了計算緩衝日期
????Access / now :基於伺服器現行的那一瞬間來開始計算緩衝日期
????Modifications: 基於被修改的最後一個日期開始計算緩衝日期
<type>: 緩衝日期計算單位 如:seconds ,minutes, days, weeks 等
?
?
設定伺服器無緩衝
使用 頭資訊Control-cache : no-store,must-revalidate
告訴瀏覽器該頁面不允許緩衝,必須去主伺服器驗證,比如驗證碼或者一些比較私密的資訊等
?
具體用法:
1.在http.conf中開啟mod_header.so模組
重啟伺服器 Http –k restart
2.在要設定無緩衝的目錄添加.htaccess檔案
ExpiresActive On
ExpiresByType image/png "access plus 30 seconds"
<FilesMatch "\.(png|gif)$">????????//如果是PNG 圖片 或者 gif 圖片則不緩衝
header set Cache-control "no-store,must-revalidate"
</FilesMatch>
?
?
同時也可以加入下面兩屬性來控製圖片的不緩衝:
header unset Etag????????//來設定不設定 圖片簽名 Etag
header unset Last-Modified
?
?
?
?
到此時,當我們設定好不緩衝,我們瀏覽圖片時,即便是同一張圖片,我們也一直重新整理也顯示的是200,不再是顯示304了
HTTP協議控制瀏覽器緩衝HTTP協議控制瀏覽器緩衝