說一說瀏覽器快取

2021-09-13 09:48:39 字數 1618 閱讀 4840

快取的問題一直都是我們比較頭痛的問題,為了提高**響應速度,減少伺服器的負擔,和節省頻寬,將需要將靜態資源快取在客戶端,

http 快取相關的幾個重要的header

cache-control

cache-control 這是http快取最重要的頭部字段,用於指定所有快取機制在整個請求 / 響應 中必須服從的命令。

cache-control 的定義是:cache-control = 「cache-control」

public 所有內容都將被快取

private 內容只快取到私有快取中

no-cache 所有內容都不會被快取

no-store 所有內容都不會被快取到快取或 internet 臨時檔案中

must-revalidation/proxy-revalidation 如果快取的內容失效,請求必須傳送到伺服器 / **以進行重新驗證

max-age=*** (*** is numeric) 快取的內容將在 *** 秒後失效 , 這個選項只在 http 1.1 可用 , 並如果和 last-modified 一起使用時 , 優先順序較高

cache-control 是關於瀏覽器快取的最重要的設定,因為它覆蓋其他設定,比如 expires 和 last-modified 。另外,由於瀏覽器的行為基本相同,這個屬性是處理跨瀏覽器快取問題的最有效的方法。

expires

expires 頭部字段提供乙個日期和時間,響應在該日期和時間之後被認為快取失效。失效的快取條目通常不會被瀏覽器返回。

expires 的定義是 「expires: sun, 08 nov 2009 03:37:26 gmt」。如果檢視內容時的日期在給定的日期之前,則認為該內容沒有失效並從快取中提取出來。反之,則認為該內容失效,快取將採取一些措施。

注意:cache-control max-age 和 s-maxage 將覆蓋 expires 頭部。

last-modified/e-tag

last-modified 實體頭部字段值通常用作乙個快取驗證器。簡單來說,在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是200,

內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣:last-modified: fri, 12 may 2006 18:53:33 gmt ,當第二次請求此url時,根據 http 協議的規定,瀏覽器會向伺服器傳送 if-modified-since 報頭,詢問該時間之後檔案是否有被修改過:如果伺服器端的資源沒有變化,則返回 http 304 (not changed.)狀態碼。而不是響應的檔案。

etag 是根據web資源生成的一段hash字串。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端,當資源傳送改變時,etag也隨之發生變化

以下是伺服器端返回的格式:

etag: "50b1c1d4f775c61:df3"

客戶端的查詢更新格式是這樣的:

if-none-match: w/"50b1c1d4f775c61:df3"

如果etag沒改變,則返回狀態304,這也和last-modified一樣。

說一說瀏覽器快取

快取的問題一直都是我們比較頭痛的問題,為了提高 響應速度,減少伺服器的負擔,和節省頻寬,將需要將靜態資源快取在客戶端,http 快取相關的幾個重要的header cache control cache control 這是http快取最重要的頭部字段,用於指定所有快取機制在整個請求 響應 中必須服從...

說一說 r與 n

今天在用python讀取txt檔案的時候,遇到了乙個比較坑的問題,那就是 n 和 r 究竟有什麼區別?在計算機還沒有出現之前,人們設計了一種機器叫做電傳打字機,這種機器每秒鐘可以打10個字元。不過它有個問題,就是打完一行換行的時候,需要0.2s,正好可以列印兩個字元,如果這個時候有新的字元傳過來,那...

簡單的說一說mmap

mmap memory map,就是記憶體對映 簡單的說就是將檔案對映到使用者的位址空間中。這麼做有什麼好處呢?1.傳統檔案訪問方式是,首先用open系統呼叫開啟檔案,然後使用read,write等呼叫進行順序或者隨即的i o.這種方式是非常低效的,每一次i o操作都需要一次系統呼叫.而通過mmap...