一、詳解瀏覽器快取機制
對於,如何說明快取機制,在網路上找到了兩張圖,個人認為思路是比較清晰的。總結時,上圖。
這裡需要注意的有兩點:
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秒
#好含這些字尾的資源,都快取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格式的檔案。可在配置檔案中,新增以下**,做測試:
瀏覽器快取機制詳解
瀏覽器的快取機制,主要指由http 協議 定義的快取機制。但也有非 協議定義的快取機制,如 html meta 標籤,但所有快取 伺服器都不支援,因為 不解析 html 內容本身。下主要介紹 協議定義的快取機制 cache control 用於指定 快取控制,cache control 的選擇更多,...
瀏覽器快取機制詳解
瀏覽器快取就是把乙個已經請求過的web資源 比如html image js css等檔案 拷貝乙份副本儲存在瀏覽器中。快取會根據進來的請求儲存輸出內容的副本。當下乙個請求來到的時候,如果是相同的url,快取會根據快取機制決定是直接使用副本響應訪問請求,還是向源伺服器再次傳送請求。1 減少網路頻寬消耗...
瀏覽器快取機制
最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...