HTTP調試工具:Fiddler 介紹二

來源:互聯網
上載者:User

學習如何通過Fiddler建立一個速度更快的網站。在這篇文章中,我們將使用Fiddler去探究HTTP的效能,緩衝,以及壓縮。

如果你要是沒有安裝和配置過Fiddler, 請從文章的第一篇開始。

 

HTTP效能總覽

毫無疑問使用者都喜歡訪問速度快的網站。使用者是非常的不耐煩,除非你的網站是沒有競爭者,換句話就是處於壟斷地位的。如果你的訪問者來自世界各地,那你就必須要保證你的網站在執行效率方面要非常好,甚至要更加標準。作為一個國際化的網路連接點,通常要受到來自兩個方面的壓力:高訪問量以及低頻寬。

 

在第一次至關重要的訪問中,使用者必須要下載每一個內容片斷,來產生頁面,包括JS,CSS,Images,HTML,如果你的頁面太難載入(包括IIS接到請求執行並返回給用戶端HTML),訪問者也許就會離開你的頁面!

通過暴露所有的HTTP通訊,Fiddler很容易得向你展示哪些檔案經常被用於產生一個頁面,

Shift+click 可以在Fiddler左邊框的會話列表中多選會話,來計算那些被選會話的“頁面總重量”。那些被轉換成位元組的數量。

 

如果你想讓你的客戶在第一次訪問的時候就留下深刻的印象 ,那麼最好的,也是唯一的途徑就是返回給客戶更少的檔案。

 

1 使用更少的圖畫

2 將所有的CSS濃縮到一個CSS檔案中

3 將所有的指令碼濃縮到一個JS檔案中

4 簡化你的頁面時間

5 使用HTTP壓縮

 

如果要是你已經對使用者的第一次來訪的效能進行了最佳化,那麼你可以通過Http 緩衝的優勢來使得你的網站訪問速度更快!

 

HTTP 緩衝介紹

 

2種方式來提升你的web 應用程式的速度:

減少請求和響應的往返次數

減少請求和響應的往返位元組大小。

 

HTTP緩衝是最好的減少用戶端伺服器端往返次數的辦法。緩衝提供了提供一種機制來保證用戶端或者代理能夠儲存一些東西,而這些東西將會在稍後的HTTP 響應中用到的。(即第一次請求了,到了用戶端,緩衝起來,下次如果頁面還要這個JS檔案或者CSS檔案啥的,就不要到伺服器端去取下來了,但是還是要去伺服器上去訪問一次,因為請求要對比ETAG值,關於這個值,我將會在下次翻譯中介紹其作用)這樣,就不用讓檔案再次跨越整個網路了。

 

緩衝相關的要求標頭

 

為了提高效能,微軟的IE和其他的web用戶端總是想盡辦法來維持從遠程伺服器上下載下來的本地的緩衝。

當用戶端需要一個資源(html,css.js…),他們有3種可能的動作:

1 發送一個一般的HTTP請求到遠程伺服器端,請求這個資源。

2 發送一個有條件的HTTP請求到伺服器,條件就是如果它不同於本地的緩衝版本。

3 如果緩衝的拷貝可用,就使用本地的緩衝資源。

 

當發送一個請求,客戶也許會使用如下的幾個HEADER

 

Table 1. Client Cache Headers

Pragma: no-cache

The client is unwilling to accept any cached responses from caches along the route and the origin server must be contacted for a fresh copy of the resource.

If-Modified-Since: datetime

The server should return the requested resource only if the resource has been modified since the date-time provided by the client.

If-None-Match: etagvalue

The server should return the requested resource if the ETAG of the resource is different than the value provided by the client. An ETAG is a unique identifier representing a particular version of a file.

 

1 Pragma:no-cache   表明用戶端不願意接受緩衝請求,它需要的是最即時的資源。

2 If-Modified-Since: datetime 表明如果這個資源自從上次被用戶端請求,就已經修改了,那麼伺服器就會返回給用戶端最新的。

3 If-None-Match: etagvalue 如果用戶端資源的ETAG值跟伺服器端不一致了,那麼伺服器端返回最新的資源。ETAG就是一個唯一的ID,用來表示一個檔案的一個特定的版本。

 

如果要是這些有條件的請求,也就是含有If-Modified-Since 或者 If-None-MatchHeader頭的請求,伺服器將會以HTTP/304 Not Modified 來作為響應,那麼用戶端就知道可以使用用戶端的緩衝了。否則,伺服器將會返回一個新的響應並且用戶端就會拋棄到期的緩衝資源。

你可以觀察2個連貫的請求,來請求同一個圖片,你會在Fiddler中發現:在第一個本機快取版本中,伺服器返回一個含有ETAG的檔案,和一個含有最後修改日期的檔案,在這個第一次的請求會話中,一個本地的緩衝版本已經可以使用了。這樣一來,一個有條件的請求就被建立出來。然後你再次請求這個圖片的時候,他就就會響應一個本機快取的檔案,當然前提是第一次緩衝的圖片的ETAG值或者If-Modified-Since 值跟伺服器上匹配的話,伺服器就響應一個304給用戶端。

Session #1

 

GET /images/banner.jpg HTTP/1.1

Host: www.bayden.com

 

HTTP/1.1 200 OK

Date: Tue, 08 Mar 2006 00:32:46 GMT

Content-Length: 6171

Content-Type: image/jpeg

ETag: "40c7f76e8d30c31:2fe20"

Last-Modified: Thu, 12 Jun 2003 02:50:50 GMT

 

Session #2

 

GET /images/banner.jpg HTTP/1.1

If-Modified-Since: Thu, 12 Jun 2003 02:50:50 GMT

If-None-Match: "40c7f76e8d30c31:2fe20"

Host: www.bayden.com

 

HTTP/1.1 304 Not Modified

 

 

因為一個HTTP304響應僅僅包含頭,沒有body,所有它在穿越互連網的時候要比攜帶了資源的快很多,儘管如此,HTTP/304響應需要一個伺服器的往返,但是通過細心的設定回應標頭,web程式員可以消除這種因素,甚至是有條件的請求。

緩衝相關回應標頭

 

通常緩衝機制是由回應標頭來控制的。HTTP規範描述了Header控制緩衝,The optional Cache-Control,Expires(到期)。

Expires頭包含一個絕對的日期,當超過此日期,它將不會被考慮更新了。

 

Table 2. Common Cache-Control Headers

Value

Meaning

public

The response may be stored in any cache, including caches shared among many users.

private

The response may only be stored in a private cache used by a single user.

no-cache

The response should not be reused to satisfy future requests.

no-store

The response should not be reused to satisfy future requests, and should not be written to disk. This is primarily used as a security measure for sensitive responses.

max-age=#seconds

The response may be reused to satisfy future requests within a certain number of seconds.

must-revalidate

The response may be reused to satisfy future requests, but the origin server should first be contacted to verify that the response is still fresh.

Cache-Control頭的參數設定:

Public 響應會被緩衝,並且在多使用者間共用。

Private 響應只能夠作為私人的緩衝,不能再使用者間共用。

No-cache 響應不會被緩衝

No-store 響應不會被緩衝,並且不會被寫入到用戶端的磁碟裡,這也是基於安全考慮的某些敏感的響應才會使用這個。

Max-age=#seconds 響應將會某個指定的秒數內緩衝,一旦時間過了,就不會被緩衝。

Must-revalidate 響應會被重用來滿足接下來的請求,但是它必須到伺服器端去驗證它是不是仍然是最新的。

 

注意:

如果你要想在iis中配置緩衝,請參閱溫軟的知識技術文章:

·                  How to Modify the Cache-Control HTTP Header When You Use IIS.

你可以學習更多關於在asp.net中使用緩衝的知識文章:

·                  How To Cache in ASP.NET by Using Visual C# .NET.

如果你發現你經常在你的網站上更新檔案,但是並沒有變更檔名字,那你就必須要非常小心地設定你的緩衝存留時間。例如:如果你要一個thisyear.gif圖片檔案顯示當前的年份在網站上,你需要保證這個緩衝到期時間不能超過一天,否則一個使用者在12月31號訪問你的網站的時候,在1月1號就不能顯示正確的日期。

由於某些原因,伺服器可能會設定:Progma:no-cache 頭,Cache-control:no-cache

Header中的參數:Vary 是一個緩衝訊號,Vary:User-Agent表示緩衝當前的響應,但是僅限於當發送同樣的User-Agent 頭的時候。指令 Vary:* 就相當於Cache-Control:no-Cache。

Vary就相當於asp.net中的緩衝的參數一樣,意思是根據什麼來緩衝,如果要是知道asp.net的緩衝的使用方法,就很容易明白這個參數的意思。

 

使用HTTP會話列表,Fiddler使用者可以看到在頁面裡包含的HTTP緩衝頭。

 

Fiddler 會話列表

如果響應不包含Expires或者Cache-Control,那麼用戶端就會被迫作為一個有條件的請求,來保證所有的資源都是最新的。

 

有條件的請求和WinInetCache

IE通過Microsoft windows Internet Services來最大程度的利用快取服務。WinInet允許使用者配置緩衝的大小和行為,設定緩衝進行如下操作:

1 開啟IE,

2 工具選項,選擇Inrernet選項,在一般子選項中,臨時檔案夾內,點擊設定

就是選村的四種設定:

 

標記效能問題:

你可以使用Fiddler的自訂規則來標記某些你需要的,比如如果某個響應大於25KB,你可以把當前的Session標記為紅色,更加醒目。以下代碼都是在OnBeforeResponse事件中:

// Flag files over 25KB

   if (oSession.responseBodyBytes.length > 25000){

      oSession["ui-color"] = "red";

      oSession["ui-bold"] = "true";

      oSession["ui-customcolumn"] = "Large file";

   }

同樣,你也可以標記響應並不指示緩衝資訊。

   // Mark files which do not have caching information

if (!oSession.oResponse.headers.Exists("Expires") &&

!oSession.oResponse.headers.Exists("Cache-Control")){

      

oSession["ui-color"] = "purple";

      oSession["ui-bold"] = "true";

   }

介紹HTTP壓縮

所有的目前流行的WEB伺服器和瀏覽器都提供HTTP壓縮支援。HTTP壓縮可以非常顯著地降低用戶端和伺服器端的通訊量。節省超過50%的HTML,XML,CSS,JS等檔案。一個瀏覽器發送一個訊號給伺服器,他可以介紹HTTP壓縮過的內容,並且會把用戶端所支援的壓縮類型放在請求的Header中,例如:考慮如下的請求:

GET / HTTP/1.1

Accept: */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Host: search.msn.com

這個 Accept-Encoding 頭表明IE將願意接受GZIP格式的和DEFLATE格式的壓縮響應。

相應的響應如下:

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Server: Microsoft-IIS/6.0 --Microsoft-HTTPAPI/1.0

X-Powered-By: ASP.NET

Vary: Accept-Encoding

Content-Encoding: gzip

Date: Tue, 15 Feb 2006 09:14:36 GMT

Content-Length: 1277

Connection: close

Cache-Control: private, max-age=3600

 

你可以使用Fiddler來解壓縮這些資料。實驗表明,使用HTTP壓縮能大量減少資料往返,一個普通的CSS檔案甚至能減少80%!當然壓縮是以犧牲CPU效能為代價的。特別是壓縮動態檔案,但是一般的權宜之策是壓縮例如JS,CSS等靜態檔案,因為他們在第一次壓縮後,就會被儲存在伺服器上,如果要壓縮asp.net動態檔案,一定要有個權衡才行

如果您現在還是不滿足您的程式最佳化,那麼你還可以參看這篇文章,

Ten Tips for Writing High-Performance Web Applications

聯繫我們

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