理解ASP.NET與用戶端緩衝之HTTP協議

來源:互聯網
上載者:User
asp.net|緩衝|用戶端    前言

  這個系列的文章要討論的是如何通過ASP.NET伺服器端技術來最佳化用戶端緩衝策略,而且讓這種策略變得可配置和可擴充。我們要瞭解的知識從HTTP協議中相關屬性對用戶端緩衝的影響,到ASP.NET如何控制這些屬性來實現我們的緩衝策略。

   HTTP基礎知識

  由於討論涉及到用戶端緩衝,所以還是先要簡單介紹一下HTTP協議是如何控制用戶端緩衝的,這裡涉及到HTTP頭的Last-Modified、ETag等屬性。

  Last-Modified

  在瀏覽器第一次請求某一個URL時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有一個Last-Modified的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣:

Last-Modified: Fri, 12 May 2006 18:53:33 GMT

  用戶端第二次請求此URL時,會在頭部加入一個屬性,詢問該時間之後檔案是否有被修改過:

If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT

  如果伺服器端的檔案沒有被修改過,則返回狀態是304,內容為空白,這樣就節省了傳輸資料量。如果伺服器端的檔案被修改過,則返回和第一次請求時類似。

  ETag

  和Last-Modified類似,由於RFC2616(也就是HTTP/1.1)中沒有說明ETag該是什麼格式的,只要確保用雙引號括起來就行了,所以你可以用檔案的hash,甚至是直接用Last-Modified,以下是伺服器端返回的格式:

ETag: "50b1c1d4f775c61:df3"

  用戶端的查詢更新格式是這樣的:

If-None-Match: W/"50b1c1d4f775c61:df3"

  如果ETag沒改變,則返回狀態304然後不返回,這也和Last-Modified一樣。

Expires

  這個屬性就如我們在ASP中使用HttpResponse.ExpiresAbsolute一樣直接,聲明某某時刻到期之後瀏覽器就應該重新請求該URL,使用格式為:

Expires: Sun, 10 Feb 2002 16:00:00 GMT

  注意HttpResponse.ExpiresAbsolute在ASP.NET中是不建議使用的,現在我們應該使用的是HttpResponse.Cache.SetExpires。

  Pragma

  通常我們用到的值就是no-cache,這和在Cache-Control中使用no-cache值是一樣的,Cache-Control在下面講。Pragma的使用格式如下:

  Pragma: no-cache
  Cache-Control

  這是一個集合型屬性,它裡面能夠包含很多子屬性,並且允許使用者擴充新的子屬性。常見的子屬性包括:

  max-age - 以秒為單位的逾時,覆蓋Expires屬性。
  public - 允許儲存在共用快取中。
  private - 只允許儲存在私人緩衝中。
  no-cache - 不允許緩衝。
  no-store - 不允許緩衝在持久介質中。
  no-transform - 不允許轉換儲存系統。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.