3 回答

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

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