3 回答

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

TA貢獻2012條經驗 獲得超12個贊
Expires
并且Cache-Control
是“強緩存頭”
Last-Modified
并且ETag
是“弱緩存頭”
首先,瀏覽器檢查Expires/Cache-Control
以確定是否向服務器發出請求
如果必須發出請求,它將發送Last-Modified/ETag
HTTP請求。如果Etag
文檔的值與之匹配,則服務器將發送304代碼而不是200,并且沒有內容。瀏覽器將從其緩存中加載內容。
- 3 回答
- 0 關注
- 452 瀏覽
相關問題推薦
添加回答
舉報