ETag使用效果對比及經驗分享(附ETag配置教程)

佚名發表於2015-11-13

ETag是什麼 ETag標準 ETag響應頭 httpETag

提起向百度提交資料,大家基本都會想到sitemap,最近又推出的etag是什麼東東?真的能有效果嗎?

sitemap是解決網站收錄至關重要的途徑之一,而通常sitemap的更新都不是很及時,並且體量都相對較大,此時也消耗了相應的網站流量及頻寬。而ETag可以用來標示網頁是否發生了變化,如果沒有變化返回304狀態碼,就不用再重新傳輸整個網頁了。

在我們的sitemap配置了ETag之後,對日誌一段時間的監測發現,其sitemap響應時間以及耗時的平均時間均大幅度下降,爬蟲訪問sitemap檔案的次數有所增加,對於收錄而言,透過圖表也能看出相對的增長曲線,我們的整體收錄率大致提升範圍在2% – 5%左右。所以在此,強烈建議大家設定sitemap的ETag,簡簡單單的一個小動作就能看到相對明顯的效果還是很不錯的。

ETag全稱EntityTags,HTTP協議規格說明中定義“ETag”為“被請求變數的實體值”。我們也可以把ETag理解為是一個客戶端與伺服器關聯的記號。這個記號告訴客戶端,當前網頁在上次請求之後是否有發生變化,當發生變化時,ETag的值重新計算,並返回200狀態碼。如果沒有變化,返回304狀態碼。從而不會重新載入整個頁面資訊。

如下,是我司站點的sitemap檔案的頭資訊:

ETag是什麼 ETag標準 ETag響應頭 httpETag

我們看到,ETag中包含了一連串的資料,這就是計算出來的一個值,如果它發生變化,說明其頁面內容一定發生了變化。如果頁面沒有發生變化時,頭資訊應該如下:

ETag是什麼 ETag標準 ETag響應頭 httpETag

在我們與技術溝通配置ETag時,需要透過此種方式進行驗證。第一次訪問200狀態碼,有ETag的一行文字,再次訪問該頁面時,狀態碼為304,ETag的值不變。至此,我們就可以確定ETag配置成功。

另外,sitemap啟用Etag後:

1、百度可以更及時地響應sitemap的更新;

2、頁面沒有更新的情況下,對流量的消耗極小;

3、百度更加及時的抓取sitemap,便於更好的收錄;

但多數情況下,ETag會與Last-Modified一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生Last-Modified/Etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端透過將該記號傳回伺服器要求伺服器驗證其(客戶端)快取。

站點伺服器如何配置ETag?

最好是對全站進行配置ETag,這樣對於站點而言,在頻寬消耗、爬蟲抓取上的提升還是會有很大收益的。

一、Apache

Apache根據配置檔案中的配置來設定Etag值,預設的Apache的FileEtag設定為:

FileEtagINode Mtime Size

也就是根據這三個屬性來生成Etag值,他們之間透過一些演算法來實現,並輸出成hex的格式,相鄰屬性之間用-分隔,比如:"2e681a-6-5d044840",這裡面的三個段,分別代表了INode,MTime,Size根據演算法算出的值的Hex格式,可以改變Apache的FileEtag設定,比如設定成FileEtagSize,那麼得到的Etag可能為:"6",設定了幾個段,Etag值就有幾個段。

詳細配置:

步驟1

在要啟用ETag的目錄下增加.htAccess檔案並在其中增加一行,如圖:FileETagMTime Size

ETag是什麼 ETag標準 ETag響應頭 httpETag

以覆蓋預設的Innode MTime Size的ETag,因為預設的ETag使用到的Innode會導致相同的檔案在分散式伺服器上產生的ETag不同。

步驟2

如果.htacces檔案已經存在,請確保要啟用ETag的目錄/.htacces檔案中沒有FileETagNone。如果存在FileETag None,請刪去該行。

檢查沒有用mod_headers將ETag除去,即httpd.conf檔案中沒有出現下面的語句,

LoadModuleheaders_module modules/mod_headers.so

Headerunset ETag

ETag是什麼 ETag標準 ETag響應頭 httpETag

如果出現如圖情況,請刪除Headerunset ETag這一行。

步驟3

重新啟動httpd,就啟用ETag了。

二、Nginx

步驟1

確認Nginx版本,命令:Nginx安裝目錄/sbin/nginx–v,

ETag是什麼 ETag標準 ETag響應頭 httpETag

版本為1.7.3及更高,繼續步驟2;版本為1.7.3以下,1.3.3及以上,進行步驟3;版本為1.3.3以下,不支援ETag,請升級您的Nginx。

步驟2

確認沒有關閉ETag:開啟Nginx的配置檔案nginx.conf(預設位置Nginx安裝目錄/conf/),確保其中沒有出現etagoff;,下圖為出現的情況,請將此行刪除。

ETag是什麼 ETag標準 ETag響應頭 httpETag

確認沒有使用ngx_headers_more清除ETag頭:同樣在配置檔案中不能出現如下語句的任意一句,如果出現請將其刪除。

ETag是什麼 ETag標準 ETag響應頭 httpETag

重新啟動Nginx,就啟用ETag功能了。

步驟3

檢視是否開啟了gzip,且是否和etag出現衝突,出現衝突去步驟4,沒有去步驟2。

開啟Nginx的配置檔案nginx.conf(預設位置Nginx安裝目錄/conf/),其中出現gzip on;語句證明開啟了gzip,如圖

ETag是什麼 ETag標準 ETag響應頭 httpETag

開啟gzip時,可能與etag出現衝突,用瀏覽器多次請求此網站的靜態元素,如果只返回200,不返回304,證明存在衝突,請去步驟4;沒有衝突去步驟2。

相關文章