標籤:vat 怎麼 相關 兩種 cdn 注意 als 欄位 round
緩衝的作用
使用者訪問一個web頁面的頻率遠高於web頁面更新的頻率,因此多數時候使用者從伺服器擷取的html、js、css以及圖片等內容都是相同的,如果每次訪問都從伺服器擷取這些靜態內容即降低了頁面載入的速度,又佔用了多餘的伺服器頻寬,顯然是一件吃力不討好的事,此時就需要緩衝了。web緩衝大致可以分為:資料庫緩衝、伺服器端緩衝(Proxy 伺服器緩衝、CDN緩衝)、瀏覽器緩衝,瀏覽器緩衝也包含很多內容:HTTP緩衝、indexDB、cookie、localstorage等,我們只討論HTTP緩衝。
HTTP緩衝
通過對HTTP緩衝有個整體認識:
HTTP報文是瀏覽器和伺服器間通訊時發送及響應的資料區塊。瀏覽器向伺服器請求資料,發送請求request報文;伺服器向瀏覽器返回資料,返迴響應response報文。而報文資訊主要分為兩部分:
包含屬性的首部前序header,cookie,緩衝資訊等與緩衝相關的規則資訊,均包含在header中;
包含資料的主體部分body,這是HTTP請求真正想要傳輸的部分。
可以看出,HTTP緩衝得以實現主要取決於header中的參數,我們通過分析header中關於緩衝的參數,可以瞭解HTTP緩衝是怎麼工作的。
HTTP緩衝主要分為兩大類:強制緩衝、對比緩衝。強制緩衝
在沒有快取資料的情況下,瀏覽器向伺服器請求資料時,伺服器會將資料和緩衝規則一併返回,緩衝規則資訊包含在響應header中;在快取資料未失效的情況下,可以直接使用快取資料,對於強制緩衝來說,響應header中會有兩個欄位來標明失效規則(Expires/Cache-Control)。
Expires
Expires值為服務端返回的到期時間,即下一次請求時,請求時間小於服務端返回的到期時間,直接使用快取資料。不過Expires是HTTP1.0的東西,現在瀏覽器均預設使用HTTP1.1(Cache-Control),所以它的作用基本忽略。
Cache-Control
Cache-Control常見的取值有private、public、no-cache、max-age,no-store,預設為private。
private:用戶端可以緩衝 public:用戶端和Proxy 伺服器都可緩衝 max-age=xxx:緩衝的內容將在xxx秒後失效 no-cache:需要使用對比緩衝來驗證快取資料 no-store:所有內容都不會緩衝,強制緩衝,對比緩衝都不會觸發
對比緩衝
對比緩衝,進行比較判斷是否可以使用緩衝。當瀏覽器第一次請求資料時,伺服器會將緩衝標識與資料一起返回給用戶端,用戶端將二者備份至快取資料庫中;再次請求資料時,用戶端將備份的緩衝標識發送給伺服器,伺服器根據緩衝標識進行判斷,成功則返回304狀態代碼,通知用戶端可以使用快取資料,不成功則返回200狀態代碼,重新擷取資料。
對比緩衝的header中主要有兩種緩衝標識,分別在請求header和響應header中。
Last-Modified / If-Modified-Since
Last-Modified(響應header中):伺服器在響應請求時,告知瀏覽器資源的最後修改時間。If-Modified-Since(請求header中):再次請求伺服器時,通過此欄位通知伺服器上次請求時伺服器返回的資源最後修改時間。 伺服器收到請求後發現有頭If-Modified-Since 則與被請求資源的最後修改時間進行比對,若資源的最後修改時間大於If-Modified-Since,則返回狀態代碼200,重新返回資源;若資源的最後修改時間小於或等於If-Modified-Since,則響應狀態代碼304,告知瀏覽器繼續使用所儲存的cache。
Etag / If-None-Match(優先順序高於Last-Modified/If-Modified-Since)
Etag(響應header中):伺服器響應請求時,告訴瀏覽器當前資源在伺服器的唯一標識(建置規則由伺服器決定)。If-None-Match(請求header中):再次請求伺服器時,通過此欄位告知伺服器瀏覽器快取資料的唯一標識。 伺服器收到請求後發現有If-None-Match,則與被請求資源的唯一標識進行比對,不同,返回狀態代碼200,重新返回資源;相同,返回狀態代碼304,告知瀏覽器繼續使用所儲存的cache。
注意:強制緩衝如果生效,則不需要再和伺服器發生互動,而對比緩衝不管是否生效,都需要與服務端發生互動;如果兩類緩衝規則同時存在,
強制緩衝優先順序高於對比緩衝。
HTTP緩衝初探