HTTP網頁訪問應用分析
一、HTTP協議簡介
1.什么是HTTP協議
HTTP,全稱Hyper Text Transfer Protocol,中文名為超文本傳輸協議。
HTTP是一種用于從Web服務器端傳送超文本標記語言(HTML-Hyper Text Markup Language)文件到客戶端瀏覽器的傳送協議,它是Internet上最常見的協議之一。我們通常訪問的網頁,就是通過HTTP協議進行傳送的。
2.HTTP協議的工作原理
HTTP用名字標識某一資源時(即在瀏覽器中輸入網址),遵循統一資源名(URN-Uniform Resource Name)的規則,當前網絡中最常用的URN是統一資源定位符(URL-Uniform Resource Locator),當客戶端在瀏覽器中輸入一個URL或單擊一個URL超鏈接時,就確定了要訪問的地址。
以http://www.colasoft.com.cn/resource/index.html為例介紹URL的組成:
www:代表1個Web服務器;
com.cn/:Web服務器的域名,或站點服務器的名稱;
resource/:Web服務器上的子目錄,類似機器中的文件夾;
html:Web服務器上resource子目錄中的一個網頁文件,即Web服務器傳送給客戶端瀏覽器的文件。
HTTP使用TCP協議的80端口進行可靠數據傳輸,一個HTTP會話由客戶端開始發起,包括以下步驟:
客戶端在瀏覽器中標識希望獲取信息的URL;
發起HTTP連接請求,啟動客戶端(UA)和一個初始WWW服務器或代理服務器之間的一個HTTP會話;
WWW服務器或代理服務器根據客戶端的URL請求將內容傳送給客戶端。
3.HTTP協議的工作方式
宏觀工作方式:
- 客戶端(UA)直接連接到Web服務器的通訊路徑如圖1所示,客戶端與Web服務器之間的通訊不需要任何的中介服務器,這是最簡單的情況。
客戶端(UA)通過中介服務器連接到Web服務器的通訊路徑如圖2所示,客戶端與Web服務器之間的通訊通過中介服務器進行轉發,中介服務器可能有1個,也可能有多個。
客戶端(UA)到中介服務器的通訊路徑如圖3所示,客戶端將請求發送給中介服務器1,中介服務器1將其發送中介服務器2,中介服務器2再發給Web服務器,最后客戶端收到的內容由中介服務器1發送給它,而不是Web服務器。
內部操作過程:
如圖4所示,它分為四個步驟:建立連接、發出請求信息、發出響應信息、關閉連接。
4.HTTP協議的報文格式
客戶端發送的HTTP報文,我們稱為請求鏈;中介服務器或Web服務器發送的HTTP報文,稱為響應鏈。兩種報文都遵循以下格式:
一般開始行,即請求報文的請求行和應答報文的狀態行;
總頭;
報文頭;
一個空行;
報文體。
二、分析HTTP通訊
1. 分析HTTP訪問的具體流程
我們使用科來網絡分析系統捕獲并分析一個HTTP通訊過程,客戶端主機名為“wangym”,客戶端瀏覽器是IE6.0,請求的域名是“www.colasoft.com.cn”。
在客戶端上打開科來網絡分析系統。為避免數據干擾,可以設定一個過濾器,只捕獲本機的數據通訊。設定好后開始數據捕獲,同時在本機的瀏覽器中輸入www.colasoft.com.cn,待網頁全部打開后,停止捕獲。
注意:此文里提到的HTTP訪問均指標準80端口的通信,對于非80端口的HTTP訪問,用戶可在“工程->高級分析模塊->HTTP分析模塊->常規設置->端口”處進行更改,系統默認為80,當HTTP服務有多個端口時,多個端口之間用分號分隔,如80;8080。
1) HTTP請求
圖5所示的是科來網絡分析系統對上面訪問www.colasoft.com.cn的操作的HTTP請求報文跟蹤。
從圖5中的數據包列表可知,上述操作中HTTP請求的原始信息如下:
第1個數據包是DNS查詢數據包,本機通過DNS查詢獲得colasoft.com.cn對應的IP地址。
第2個數據包是DNS回應數據包,DNS服務器查詢到域名colasoft.com.cn對應的IP是64.246.27.237,并將查詢結果傳送給客戶端。
3、4、5數據包是TCP連接的三次握手數據包,連接的雙方是本機與域名colasoft.com.cn對應的IP地址64.246.27.237。
第6個數據包是客戶端發起的HTTP GET請求,向Web服務器處請求獲得內容,第7幀的解碼包含了GET請求的各參數信息。
上述HTTP訪問的HTTP請求方法是GET,而GET僅僅是HTTP眾多方法中的一種,HTTP通過不同的方法實現不同的功能,下表列出了HTTP常見的請求方法。
| 方 法 | 描述
|
| GET | 向Web服務器請求一個文件 |
| POST | 向Web服務器發送數據讓Web服務器進行處理 |
| PUT | 向Web服務器發送數據并存儲在Web服務器內部 |
| HEAD | 檢查一個對象是否存在 |
| DELETE | 從Web服務器上刪除一個文件 |
| CONNECT | 對通道提供支持 |
| TRACE | 跟蹤到服務器的路徑
|
| OPTIONS | 查詢Web服務器的性能 |
每個HTTP請求都包含兩個部分:
HTTP請求行,大多情況下為GET或POST;
HTTP請求中的可選消息頭,這些消息頭會由于使用的HTTP客戶端瀏覽器或客戶端瀏覽器配置選項的不同而不同。
具體分析圖5中第6個數據包的HTTP請求解碼,可以得到如下信息:
HTTP請求:請求的方法是GET,“/”表示請求Web服務器的根目錄,“HTTP/1.1”表示的是URI(Uniform Resource Identifier,統一資源標識符)及其版本;
Accept:指定客戶端能夠接收的內容類型,內容類型中的先后次序表示客戶端接收的先后次序。這里可以看到客戶端能夠接收的類型有gif、bitmap、jpeg等等。
Accept-Language:指定優先選擇的語言是中文;
Accept-Encoding:指定內容編碼類型為gzip或deflate;
User-Agent:包含HTTP客戶端運行的瀏覽器類型;
Host:包含的主機信息為colasoft.com.cn。
Connection:指定的連接類型為Keep-Alive。
注意:在傳送一個網頁時,Web服務器會同時打開多個TCP連接,如每一張圖片都單獨使用一個TCP連接進行傳送。
2) HTTP響應
Web服務器在收到HTTP請求后,會向HTTP客戶端發送一個應答響應。
HTTP響應:“HTTP/1.1”表示的是URI(Uniform Resource Identifier,統一資源標識符)及其版本,“200 OK”是HTTP響應的狀態碼,表示客戶端請示的頁面存在,且狀態正常。
Date:顯示當前的時間。
Server:顯示支持當前請求頁面的Web服務器的類型。
X-Powered-By:顯示當前請求頁面的腳本類型。
Set-Cookie:顯示此HTTP連接的Cookie信息。
Keep-Alive:顯示此HTTP連接的Keep-Alive時間。
Connection:顯示此HTTP連接的類型為Keep-Alive。
Transfer-Encoding:顯示此HTTP連接的傳輸編碼。
Content-Type:顯示此HTTP連接的內容類型。
Line1-N:Web服務器傳送給客戶端瀏覽器的HTML代碼。
在以太網中,數據包的大小在64-1518字節之間,如果客戶端請求的頁面大于1518字節,則會將請求的頁面分段傳送給客戶端,客戶端瀏覽器接收到Web服務器傳送給自己的HTML代碼后,便開始讀取數據并將其顯示為網頁。
HTTP的不同狀態碼表示HTTP響應的不同類型,主要包括:
| 代碼 | 描述
|
| 1xx | 信息 |
| 2xx | 成功 |
| 3xx | 重定向 |
| 4xx | 客戶端錯誤 |
| 5xx | 服務器端錯誤 |
3) HTTP訪問流程
通過上面對訪問www.colasoft.com.cn的報文進行跟蹤分析,我們可以總結出HTTP的工作流程圖如圖7所示。
注意:HTTP訪問可以使用域名,也可直接使用IP地址,在使用IP進行訪問時,將不會產生圖5中第1和第2個所表示的DNS數據包,故此HTTP流程圖里未包括DNS部分,而直接從TCP的三次握手開始。
HTTP的訪問流程如下:
客戶端向服務器發送一個TCP連接的SYN請求(1),服務器在收到此請求后使用一個SYN/ACK的數據包對其進行響應(2),而客戶端在收到此響應后再次向其發送一個ACK數據包進行確認(3),此時,TCP連接成功建立。在連接建立后,客戶端立即使用請求方法(通常為GET或POST)向服務器請求數據(4),一般情況下這時服務器會向客戶端回應其相應的HTTP報頭和數據(5),但在某些情況下(腳本比較復雜,需耗費大量時間執行)開始的時候只能返回HTTP的報頭,而數據(6、7、N)可能會在相隔一段時間后再單獨地分組進行傳輸,當數據傳輸完后,客戶端發送FIN數據包關閉連接。
對應圖7中的標識,1-2的時間表示客戶端和服務器之間路由所用的時間,4-5的時間為服務器的響應時間、5-N(此時5只返回了HTTP報頭)所用的時間為服務器上腳本程序所用的時間。科來網絡分析系統中,對于每個數據包都可查看其絕對時間和相對時間(設定某個數據包為基準),在遇到訪問網頁速度慢的情況時,捕獲HTTP的訪問并查看相應的時間,即可確定訪問速度慢的原因并排查故障。
三、總結
以上簡單介紹了HTTP協議,并使用科來網絡分析分析系統跟蹤分析了訪問一個網頁的具體流程。據此,用戶在遇到網頁訪問故障時,即可結合上述的HTTP相關知識,使用網絡檢測分析軟件(科來網絡分析系統)對HTTP訪問的報文進行跟蹤分析,以完成對此類故障的快速排查。