3 回答

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊
它們略有不同-ETag沒有客戶端可以用來確定將來是否再次請求該文件的任何信息。如果只有ETag,它將始終必須發(fā)出請求。但是,當(dāng)服務(wù)器從客戶端請求中讀取ETag時,服務(wù)器可以確定是發(fā)送文件(HTTP 200),還是告訴客戶端僅使用其本地副本(HTTP 304)。ETag基本上只是文件的校驗和,當(dāng)文件內(nèi)容更改時,ETag在語義上也會更改。
客戶端(和代理/緩存)使用Expires標(biāo)頭來確定它是否甚至根本不需要向服務(wù)器發(fā)出請求。您離Expires日期越近,客戶端(或代理)從服務(wù)器向該文件發(fā)出HTTP請求的可能性就越大。
因此,您真正想做的就是使用BOTH標(biāo)頭-根據(jù)內(nèi)容的更改頻率將Expires標(biāo)頭設(shè)置為合理的值。然后配置要發(fā)送的ETag,以便客戶端將請求發(fā)送到服務(wù)器時,它可以更輕松地確定是否將文件發(fā)送回。
關(guān)于ETag的最后一點(diǎn)說明-如果您在多臺運(yùn)行Apache的計算機(jī)上使用負(fù)載平衡的服務(wù)器設(shè)置,則可能需要關(guān)閉ETag生成。這是因為inode用作ETag哈希算法的一部分,這在服務(wù)器之間會有所不同。您可以將Apache配置為不將inode用作計算的一部分,但隨后您要確保文件上的時間戳完全相同,以確保為所有服務(wù)器生成相同的ETag。

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊
Expires
并且Cache-Control
是“強(qiáng)緩存頭”
Last-Modified
并且ETag
是“弱緩存頭”
首先,瀏覽器檢查Expires/Cache-Control
以確定是否向服務(wù)器發(fā)出請求
如果必須發(fā)出請求,它將發(fā)送Last-Modified/ETag
HTTP請求。如果Etag
文檔的值與之匹配,則服務(wù)器將發(fā)送304代碼而不是200,并且沒有內(nèi)容。瀏覽器將從其緩存中加載內(nèi)容。
添加回答
舉報