Cloudflare:什么是緩存控制?

來源: Cloudflare
作者:Cloudflare
時間:2021-01-26
16780
緩存控制是一種 HTTP 標頭,指定瀏覽器的緩存行為。簡而言之,當某人訪問網(wǎng)站時,其瀏覽器將在稱為緩存的存儲中保存某些資源,例如圖像和網(wǎng)站數(shù)據(jù)。當該用戶重新訪問同一網(wǎng)站時,緩存控制設(shè)置的規(guī)則會確定該用戶是否從本地緩存中加載這些資源,或者瀏覽器是否必須向服務(wù)器發(fā)送新資源的請求。若要更深入地了解緩存控制,需要對瀏覽器緩存和 HTTP 標頭有基本的認識。

什么是緩存控制?

緩存控制是一種 HTTP 標頭,指定瀏覽器的緩存行為。簡而言之,當某人訪問網(wǎng)站時,其瀏覽器將在稱為緩存的存儲中保存某些資源,例如圖像和網(wǎng)站數(shù)據(jù)。當該用戶重新訪問同一網(wǎng)站時,緩存控制設(shè)置的規(guī)則會確定該用戶是否從本地緩存中加載這些資源,或者瀏覽器是否必須向服務(wù)器發(fā)送新資源的請求。若要更深入地了解緩存控制,需要對瀏覽器緩存和 HTTP 標頭有基本的認識。

什么是瀏覽器緩存?

如上文所述,瀏覽器緩存是指 Web 瀏覽器保存網(wǎng)站資源,以便不必再次從服務(wù)器獲取它們。例如,網(wǎng)站上的背景圖像可以保存到本地緩存中,這樣在用戶第二次訪問該頁面時,該圖像將從用戶的本地文件加載,頁面就能以更快的速度加載加。

瀏覽器只會在指定的時間段里保留這些資源,這稱為生存時間(TTL)。如果 TTL 過期后用戶請求緩存的資源,瀏覽器必須再次與服務(wù)器聯(lián)系并下載該資源的新副本。瀏覽器和 Web 服務(wù)器如何知道每一資源的 TTL?這是 HTTP 標頭的用武之地。

什么是 HTTP 標頭?

超文本傳輸協(xié)議(HTTP)概述了萬維網(wǎng)上通信的語法,此通信由客戶端對服務(wù)器的請求和服務(wù)器對客戶端的響應(yīng)構(gòu)成。這些 HTTP 請求和響應(yīng)各自帶有一系列稱為標頭的鍵值對。

這些標頭包含有關(guān)每次通信的許多重要信息。例如,請求標頭通常包含:

有關(guān)請求了什么資源的信息

客戶端正在使用哪一瀏覽器

客戶端會接受哪些數(shù)據(jù)格式

響應(yīng)標頭通常包含以下信息:

請求是否成功得到滿足

響應(yīng)主體中任何資源的語言和格式。

緩存控制標頭可以出現(xiàn)在 HTTP 請求和響應(yīng)中。

什么是緩存控制標頭?

標頭由通過冒號分隔的鍵值對構(gòu)成。對于緩存控制,“鍵”或冒號左側(cè)的部分始終為“cache-control”?!爸怠笔窃诿疤栍覀?cè)的內(nèi)容,可以有一個或幾個逗號分隔的值來用于緩存控制。

cache-control-header.png

這些值稱為指令,指定誰可以緩存資源,以及在必須更新資源之前這些資源可以緩存的時間。下面我們介紹一些最常見的緩存控制指令:

cache-control: private

具有“private”指令的響應(yīng)只能由客戶端緩存,不能由中間代理(例如 CDN或代理)緩存。這些資源通常是包含私密數(shù)據(jù)的資源,例如顯示用戶個人信息的網(wǎng)站。

cache-control: public

相反,“public”指令表示資源可以由任何緩存存儲。

cache-control: no-store

帶有“no-store”指令的響應(yīng)無法緩存到任何位置,也永不緩存。也就是說,用戶每次請求此數(shù)據(jù)時,都必須將請求發(fā)送到源站服務(wù)器以獲取新副本。此指令通常保留給包含極其敏感數(shù)據(jù)的資源,例如銀行帳戶信息。

cache-control: no-cache

此指令表示,只有先檢查有無更新版本后,才可使用所請求資源的緩存版本。這通常使用 ETag 來完成。

ETag 是另一種 HTTP 標頭,其中包含一個特定于請求之時資源版本的令牌。每當資源更新時,此令牌會源站服務(wù)器上更改。

每次用戶返回到具有“no-cache”資源的頁面時,客戶端都必須連接到源站服務(wù)器,并將已緩存資源上的 ETag 與服務(wù)器上的 ETag 進行比較。如果 ETag 相同,則向用戶提供緩存的資源。否則表示資源已經(jīng)更新,客戶端需要下載新版本以提供給用戶。此過程可確保用戶始終獲得資源的最新版本,并且無需進行不必要的下載。

cache-control: max-age

此指令指定了生存時間,也就是資源在下載后可以從緩存服務(wù)多少秒鐘。例如,如果將最大期限設(shè)置為 1800,則首次從服務(wù)器請求資源后的 1800 秒(30 分鐘)內(nèi),后續(xù)請求都會向用戶提供該資源的緩存版本。如果 30 分鐘后用戶再次請求資源,則客戶端必須向源站服務(wù)器請求新副本。

“s-maxage”指令專門用于 CDN 等共享緩存,指定這些共享緩存能夠在多長時間內(nèi)持續(xù)從緩存中提供資源。該指令會覆蓋各個客戶端的“max-age”指令。

為什么緩存控制很重要?

瀏覽器緩存是一種既可以保留資源又能改善 Internet 上用戶體驗的好方法,但若沒有緩存控制,它會非常脆弱。各個站點上的每一資源都受到相同緩存規(guī)則的約束;也就是說,敏感信息和公共信息會以相同的方式進行緩存,頻繁更新的資源也與很少更改的資源緩存同樣的時間。

緩存控制可以增加靈活性,讓瀏覽器緩存真正發(fā)揮作用,使開發(fā)人員能夠決定如何緩存每種資源。它還允許開發(fā)人員為中介設(shè)置特殊規(guī)則,這就是為什么使用 CDN 的網(wǎng)站(例如Cloudflare CDN )的性能一般要勝于不使用 CDN 的網(wǎng)站。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Cloudflare,本站不擁有所有權(quán),不承擔相關(guān)法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多