詳解瀏覽器快取機制與Apache設定快取

2021-07-22 06:55:04 字數 1848 閱讀 3342

一、詳解瀏覽器快取機制

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

這裡需要注意的有兩點:

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,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...