http響應頭中快取相關字段

2021-09-13 12:35:55 字數 1378 閱讀 9077

瀏覽網頁開啟f12開啟偵錯程式,可以檢視請求的詳細情況(有些欄位是沒有的)。

強快取定義: 在快取未失效時候,瀏覽器向服務端發起請求,直接從快取中獲取資料,

expires 是http1.0的東西。

cache-control 是http1.1的東西。cache-control:max-age=取代了expires。不過向下相容expires。

expires

expires的值為web伺服器返回的到期時間(gmt 格林威治時間),瀏覽器下次請求時間小於伺服器返回的時間則瀏覽器直接從快取中獲取資料,而不用再次傳送請求。

cache-control

cache-control常見的取值:private, public, nocache, max-age, nostore

private : 客戶端可以快取

public : 客戶端和**伺服器都可快取

max-age= : 快取儲存的最大週期,超過這個時間快取被認為過期(單位秒)

no-cache : 並不是不快取,是會被快取的,只不過每次在向瀏覽器提供相應資料時,瀏覽器每次都要向伺服器傳送請求,有伺服器來決策評估快取的有效性。

no-store : 所有內容都不快取。

last-modified

或者if-modified-since

伺服器響應瀏覽器請求,告訴瀏覽器資源的最後修改時間

etag

etag是實體標籤(entity tag)的縮寫, 根據實體內容生成的一段hash字串(類似於md5或者sha1之後的結果),可以標識資源的狀態。可以理解為乙個資源的唯一識別符號,只要檔案發生變化etag的值也變化。

last-modified 和etag區別:

last-modified 和etag都是標識檔案是否修改的。而etag比last-modified更加嚴謹。

一些檔案也許會週期性的更改,但是他的內容並不改變(僅僅改變的修改時間),這個時候我們並不希望客戶端認為這個檔案被修改了

某些檔案修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了n次),if-modified-since能檢查到的粒度是s級的,這種修改無法判斷

如需要對動態生成的內容做快取,那就可以用etag來控制快取了

注意:如果同時有last-modified和etag存在,在傳送請求時,瀏覽器會一次性的將這兩個值都發給伺服器,沒有優先順序,伺服器是都比較,還是只比較乙個,不同的web伺服器可能比較邏輯不一樣吧。

對比快取定義:伺服器對比判斷檔案是否修改,告訴瀏覽器是否可以使用本地快取。對比生效時,伺服器返回給瀏覽器的http code 為304,伺服器只返回http header資訊,並無響應正文。瀏覽器收到304的返回,知道本地快取並無修改,直接使用本地快取。

更加深入的了解:http快取

http頭中的host欄位詳解

host 客戶端指定自己想訪問的http伺服器的網域名稱 ip 位址和埠號。今天同事問了乙個問題引發了我對http頭中host欄位的詳細思考,總結了以下5條。1.host欄位可以是網域名稱,也可以是ip位址。host欄位網域名稱 ip後可以跟埠號,如host www.6san.com 8080 2....

理解http響應頭中的Date和Age

date date頭域表示訊息傳送的時間,時間的描述格式由rfc822定義。例如,date mon,04 jul 2011 05 53 36 gmt。age 當 伺服器用自己快取的實體去響應請求時,用該頭部表明該實體從產生到現在經過多長時間了。比如訪問時,date為mon,04 jul 2011 0...

HTTP快取字段總結

首部 請求首部 請求首部是只在請求報文中有意義的首部。響應首部 實體首部 用來描述http報文的負荷,由於請求和響應報文中都可能包含實 體部分,所以在這兩種型別的報文中都可能出現這些首部。實體首部提供了有關實體及其內容的大量資訊,從有關物件型別的資訊,到能夠對 資源使用的各種有效的請求方法。總之,實...