Http 1.1 Etag 與 Last-Modified提高php效率

來源:互聯網
上載者:User

在 Blog 盛行的今天,一些 Web 應用程式需要解析大量的 ">RSS Feed .如何提高效率是個非常重要的問題.在 MagpieRSS 的 Features 中列舉了這樣的一條: ">HTTP Conditional GETs Save bandwidth and speed up download times with intelligent use of Last-Modified and ETag.. 這裡的 Etag 引起了我的注意.

什麼是 Etag ?

通過閱讀 RFC 2616 ,得到了對 Etag 的一點印象:

The ETag response-header field provides the current value of the entity tag for the requested variant......Entity tags are normally "strong validators," but the protocol provides a mechanism to tag an entity tag as "weak." One can think of a strong validator as one that changes whenever the bits of an entity changes, while a weak value changes whenever the meaning of an entity changes. Alternatively, one can think of a strong validator as part of an identifier for a specific entity, while a weak validator is part of an identifier for a set of semantically equivalent entities.

從上我們可以大致得知,Entity tags 本質上說是一種"強校正器",但是 ">HTTP 協議提供了一種通過給 Entity tags 打標籤的"弱"的機制(類似於內容的校正碼).雖然這段話後面通過兩種方式進行瞭解釋,但是還是有些晦澀.我看了這段話之後只是得出了 Etag 的 "E" 代表 "Entity" 而已.

Magpie 首頁上提到了一篇文章: HTTP Conditional Get for RSS Hackers ,拜讀之後清晰了許多.要先說說 ">HTTP Conditional GETs 的基本原理,很簡單,就是說,從 Web 服務器取資料的時候,如果檔案變化了,給我新的檔案,如果檔案沒有變化,只需告訴用戶端沒有變化即可,不必再把檔案取回來.這樣就可節省大量的網路頻寬和資源.

Etag 與 Last-Modified 是從 ">HTTP 1.0 到 ">HTTP 1.1 才有的概念.當我們從 Web 服務器擷取檔案的時候,只需要讀取 ">HTTP 回應標頭的 Etag 與 Last-Modified 欄位即可,這兩個欄位裡面的具體內容是什麼可以不管(可能會千奇百怪,">RFC 2616 對 Etag 沒有具體值的定義),把這兩個值 Cache 在本地,下次檢查檔案是否更新的時候比對這兩個值即可.如果沒有變化,伺服器的響應代碼不是 ">HTTP 200 (OK) , 而是 304.

如.目前 OpenRSS 雖然訂閱了40 多個 Feed,但是響應速度很不錯.在使用 Gregarius 的過程中(Lilina 也應用了 ETag),發現了 FeedBurnrer 燒錄的 Feed ,幾乎都是用了 Etag 的(否則估計伺服器要癱瘓,Hoho).我們再測試一下 ">HTTP header 的響應情況:

$ curl -I http://feeds.feedburner.com/dbanotesHTTP/1.1 200 OKDate: Tue, 25 Oct 2005 11:34:15 GMTServer: ApacheLast-Modified: Tue, 25 Oct 2005 04:30:12 GMTETag: U4q478bDKLqZ8UMMC8A5afZuHugContent-Type: text/xml;charset=utf-8$ curl -I http://feeds.feedburner.com/dbanotesHTTP/1.1 200 OKDate: Tue, 25 Oct 2005 11:34:21 GMTServer: ApacheLast-Modified: Tue, 25 Oct 2005 04:30:12 GMT ETag: U4q478bDKLqZ8UMMC8A5afZuHugContent-Type: text/xml;charset=utf-8

在這個期間,我的 Blog 沒有更新.所以 Last-Modified 和 ETag 返回的都是相同的值.這樣 Gregarius 就不必重新解析了. 國內的 GreatNews 是支援 ">HTTP Conditional GETs 的,更棒的是還支援 gzip/deflate encoding.而另一個 RSS 閱讀工具 POPU (周博通) 就不知道了.

以上是我的筆記,如有理解錯誤,請指正!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.