ETAG 屬于條件請(qǐng)求(Conditional Request)范疇下的概念。 條件請(qǐng)求是瀏覽器可以詢問服務(wù)器是否有更新的資源副本的請(qǐng)求,。 瀏覽器將發(fā)送一些關(guān)于它所持有的緩存資源的信息,,服務(wù)器將確定是否應(yīng)該返回更新的內(nèi)容或者瀏覽器的副本是最新的,。 在后者的情況下,返回 304(未修改)的 HTTP 狀態(tài),。 通過設(shè)置 ETag 或 Last-Modified,,可以觸發(fā) HTTP 請(qǐng)求頭部字段中提到的 If-Modified-Since 或 If-None-Match 請(qǐng)求字段。 當(dāng)正確配置的 Web 服務(wù)器看到來自客戶端的這些傳入的請(qǐng)求標(biāo)頭時(shí),,服務(wù)器可以確認(rèn)瀏覽器在其 HTTP 緩存中已經(jīng)擁有的資源版本是否與 Web 服務(wù)器上的最新版本匹配,。 如果匹配,則服務(wù)器可以響應(yīng) 304 Not Modified HTTP 響應(yīng),,相當(dāng)于告訴客戶端即瀏覽器,, 服務(wù)器發(fā)送這種類型的響應(yīng)時(shí),,需要傳輸?shù)臄?shù)據(jù)非常少,因此通常比必須實(shí)際發(fā)送回所請(qǐng)求的實(shí)際資源的副本要快得多,。 這是因?yàn)?,盡管條件請(qǐng)求確實(shí)會(huì)通過網(wǎng)絡(luò)調(diào)用調(diào)用,但未修改的資源會(huì)導(dǎo)致響應(yīng)主體為空——節(jié)省了將資源傳輸回最終客戶端的成本,。 后端服務(wù)通常還能夠非??焖俚卮_定資源的最后修改日期,而無需訪問資源,,這本身可以節(jié)省大量的處理時(shí)間,。 上圖的例子是,瀏覽器從服務(wù)器請(qǐng)求 /file 并包含 If-None-Match 標(biāo)頭,,以指示服務(wù)器僅在服務(wù)器上文件的 ETag 與瀏覽器的 If-None-Match 值 在這種情況下,,這 2 個(gè)值確實(shí)匹配,,因此服務(wù)器返回 304 Not Modified 響應(yīng),其中包含有關(guān)文件應(yīng)緩存多長時(shí)間的說明(緩存控制:max-age=120),。 |
|