在HTTP1.1規範中,新增了一個HTTP頭信息:ETag。對於普通開發者來講,可能平時真的不會接觸到該HTTP頭。平時接觸不到或者說用得少,不表明這個請求頭不重要。ETag使用得當,是能夠減小服務器帶寬壓力的。瀏覽器
Etag是 Entity tag的縮寫,能夠理解爲「被請求變量的實體值」,Etag是服務端的一個資源的標識,在 HTTP 響應頭中將其傳送到客戶端。所謂的服務端資源能夠是一個Web頁面,也能夠是JSON或XML等。服務器單獨負責判斷記號是什麼及其含義,並在HTTP響應頭中將其傳送到客戶端。好比,瀏覽器第一次請求一個資源的時候,服務端給予返回,而且返回了ETag: "50b1c1d4f775c61:df3" 這樣的字樣給瀏覽器,當瀏覽器再次請求這個資源的時候,瀏覽器會將If-None-Match: W/"50b1c1d4f775c61:df3" 傳輸給服務端,服務端拿到該ETAG,對比資源是否發生變化,若是資源未發生改變,則返回304HTTP狀態碼,不返回具體的資源。緩存
咱們能夠經過Etag來利用瀏覽器的緩存,下降咱們服務器的帶寬壓力。這是能夠提高服務端的性能的(數據傳輸上)。七牛雲的文件存儲,就用到了Etag的屬性。如今,我請求七牛雲上的一個資源: 服務器
能夠經過它的響應頭看到,返回了Etag字段給咱們。Etag的值爲Fpl1rXE-K20cYsLu89YTzUQ3ydDk。性能
再次刷新資源: cdn
本文只是對Etag作一個概念性的講解,而且結合了七牛雲的對象存儲的例子,分析了Etag緩存的流程。關於Etag,還有不少東西沒有深刻講解,好比Etag是怎麼計算的,Last-Modified/If-Modified-Since是什麼,以及Etag實戰等,這些在後續再作深刻的講解吧!對象