圖解HTTP權威指南(五) | HTTP快取
阿新 • • 發佈:2021-01-06
作者簡介
李先生(Lemon),高階運維工程師(自稱),SRE專家(目標),夢想在35歲買一輛保時捷。喜歡鑽研底層技術,認為底層基礎才是王道。一切新技術都離不開作業系統(CPU、記憶體、磁碟)、網路等。堅持輸入輸出,記錄自己學習的點滴,在平凡中堅持前行,總有一天會遇見不一樣的自己。公眾號:運維汪(ID:Leeeee_Li)。
一、快取的優點
二、快取命中
2、快取未命中 一些到達快取的請求可能會由於沒有副本可用,而被轉發到原始伺服器,稱為快取未命中(cache miss)
3、HTTP再驗證 原始伺服器的內容可能會發生變化,快取要對其進行檢測,看他們儲存的副本是否仍然是伺服器上最新的副本,這種新鮮度檢測被稱為HTTP再驗證。 3.1、再驗證命中 快取對快取的副本進行再驗證時,會向原始伺服器傳送一個小的再認證請求。如果內容沒有變化,伺服器返回304 Not Modified。這種認證稱為再驗證命中(revalidate hit)或緩慢命中(slow hit)
3.2、再驗證未命中 如果伺服器物件已與快取副本不同,伺服器返回200 OK
3.3 物件被刪除 如果伺服器物件已經被刪除了,伺服器就返回404 Not Found響應,快取也會將其副本刪除。 4、快取命中率 快取提供服務的請求所佔的比例稱為快取命中率(cache hit rate),也稱文件命中率(document hit rate)。 5、位元組命中率 位元組命中率表示的是快取提供的位元組在傳輸的所有位元組中所佔的比例。
三、快取的處理步驟
1、接收--快取從網路中接收抵達的請求報文。 2、解析--快取對報文進行解析,提取出URL和各種首部。 3、查詢--快取檢視是否有本地副本可用,如果沒有,就去伺服器獲取一份並儲存在本地。 4、新鮮度檢查--快取檢視已快取的副本是否新鮮,如果不是,就詢問伺服器是否有任何更新。 5、建立響應--快取用新的首部和已快取的主體來構建一條響應報文。 6、傳送--快取通過網路將響應發回給客戶端。 7、日誌--快取可選的建立一個日誌檔案條目來描述這個事務。
四、標記
1、過期響應首部Cache-Control: max-stale 快取可以隨意提供過期的檔案 Cache-Control: max-stale=<s> 在<s>秒時間內,文件就不能過期 Cache-Control: min-fresh=<s> 至少在為了<s>秒內文件要保持新鮮 Cache-Control: max-age 資源能夠被快取(保持新鮮)的最大時間,max-age是距離請求發起的時間的秒數 Cache-Control:no-cache 每次由請求發出時,快取會將此請求傳送到伺服器進行再認證,如果沒有過期,快取才使用本地的快取副本返回 Cache-Control:no-store 快取中不得儲存任何關於客戶端和服務端響應的內容,每次由客戶端發起的請求都會下載完整的響應內容 Expires 指定一個絕對的過期日期,如果過期日期已經過了,就說明文件不再新鮮了。如Wed, 06 Jan 2021 09:35:39 GMT
在快取文件過期前,快取可以任意頻率使用這些副本,無需與伺服器聯絡(特殊情況除外)。一旦已快取文件過期,快取就必須與伺服器進行核對,詢問文件是否被修改過,如果被修改過,就要獲取一份新的(帶有新的過期日期)的副本。 2、條件方法再驗證 If-Modified-Since: <date> 如果從指定日期之後文件被修改過了,就執行請求的方法。可以與Last-Modifed伺服器響應首部配合使用,只有在內容被修改後與已快取版本有所不同的時候採取獲取內容。 If-None-Match:<tags> 伺服器可以為文件提供特殊的標籤(ETag),而不是將其與最近修改的日期相匹配。這些標籤就像序列號一樣。如果已快取標籤與伺服器文件中的標籤不一樣。If-None-Match首部就會執行所請求的方法。
五、學習交流
歡迎大家關注我的公眾號,一起交流、學習。
&nbs