HTTP協議剖析 (附HttpWatch工具監控網絡請求)


工具:HttpWatch Prov7.2.13破解版(帶正版key)

 

HTTP協議概述
 
思考2個要點:
第一:瀏覽器和服務器是通過什么連接的
第二:這種連接方式是怎么實現的
 
通過Internet去發送到服務器中,而internet內部可以通過三種形式來實現發送消息
第一:HTTP協議,最常用的
第二:FTP協議。
第三:TCP/IP協議,它也是最底層的協議,想要實現這種協議必須要實現Socket編程,然后實現socket編程又分為客戶端和服務端,服務器端的任務就是監聽某一個端口,接收客戶端的鏈接,客戶端一旦鏈接到服務器端,就會以流的方式發送數據,但是這種做法是用來上傳一些大的文件、視頻、進行斷點續傳。
 
HTTP協議實例剖析
客戶端(瀏覽器)連接服務器實現的內部原理,以輸入“https://www.baidu.com/”為例進行說明
1. 瀏覽器輸入“https://www.baidu.com/”,瀏覽器得到這個網址后(不要忘記瀏覽器也是一種軟件,也可以說我們把數據傳給了這個軟件),內部就會將這個域名發送到DNS上,進行域名解析,得到它的IP之后就會連接到百度的這個服務器上面,百度的服務器假設是220.181.112.244並鏈接到80端口,從瀏覽器到服務器端口它使用了最底層的TCP/IP協議
2.實現TCP/IP協議用Socket來完成,使用了Socket套接字,客戶端和服務端都開了一個Socket
3.服務端的80端口監聽客戶端的鏈接,這樣客戶端到服務器端就連接上了。
 
要發送數據到服務器端,通過HTTP協議必須嚴格按照它的格式來執行,那么HTTP協議到底發送了什么格式的數據呢?可以通過工具HttpWatch來監聽客戶端所發送的內容
 
HTTP協議發送的具體內容:
 
具體的請求頭:

 

Headers Sent      Value
(Request-Line)    GET / HTTP/1.1
Accept    application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Encoding    gzip, deflate
Accept-Language    zh-CN
Connection    Keep-Alive
Cookie    BD_UPN=1123314351; BD_LAST_QID=12375416872890278785; BAIDUID=7D17821C4744D5AE56F549CC1DE4EF0C:FG=1; BIDUPSID=7D17821C4744D5AE56F549CC1DE4EF0C; PSTM=1524032327
Host    www.baidu.com
User-Agent    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; Zoom 3.6.0)
 
說明:
1. Request-Line:  GET / HTTP/1.1 代表以get方式請求1.1版本的HTTP協議  (請求行使用了相對URL,此處示例沒有顯示)
2. Accept : 代表瀏覽器可以接受的數據類型
3. Accept-Encoding:gzip, deflate 代表瀏覽器可以接收壓縮過后的數據。當服務器給客戶端傳輸數據的時候為了減少流量可以進行壓縮,壓縮之后的數據傳給瀏覽器,瀏覽器可以進行自動解壓縮。
4. Accept-Language:zh-CN 代表客戶端瀏覽器的語言。
5. Connection:Keep-Alive 代表維護長連接 (告訴服務器發送完請求的文檔后是否可釋放連接,即瀏覽器希望服務器在傳送完所請求的對象后即關閉TCP連接)
6. Cookie:Cookie值
7. Host:www.baidu.com 代表請求請求的主機名 (域名)
8. User-Agent:表明用戶代理
 
服務器收到這些內容,並按照這些請求的路徑找到對應的網頁,進一步找到網頁的內容,返回給客戶端。
服務器返回給客戶端的內容有三種形式:
第一:以HTML代碼的形式返回
第二:以XML字符串的形式返回
第三:以JSON對象形式返回。在網絡流量上考慮JSON比XML要好一些。
如果在通信的過程中需要文件的上傳、下載,就會以IO流的形式傳輸。
 
HttpWatch 監聽的Overview:
Display URL    Normal browser lookup of URL https://www.baidu.com/    Completed
Started At    2018-Nov-21 09:31:17.569 (local time)    Completed
Connecting    Connecting to IP address '220.181.112.244'    Completed
Connected    Connected to IP address '220.181.112.244' from 192.168.39.187:50471    Completed
HTTP Request    Unconditional request sent for https://www.baidu.com/    Completed
HTTP Response    Headers and content returned    Completed
 
HTTP的報文結構:
HTTP有兩類報文:
a. 請求報文:從客戶端向服務器端發送請求報文。
b. 響應報文:從服務器到客戶端的回答。

 

 

 

 
 
每個請求報文發出后,都能收到一個響應報文。響應報文的第一行就是狀態行。
狀態行包含三項內容,即HTTP的版本,狀態碼,以及解釋狀態碼的簡單短語。
狀態碼(status-code) 都是三位數字的,分為5大類,5大類的狀態碼都是以不同的數字開頭的:
1xx 表示通知信息,如請求收到了或正在進行處理
2xx 表示成功,即接受或知道了。
3xx 表示重定向,如要完成請求還必須采取進一步的行動。
4xx 表示客戶端的差錯,如請求中有錯誤的語法或不能完成。
5xx 表示服務端的差錯,如服務器失效無法完成請求。
 

 

 
 
Cookie的意義:
 

 


內容參考:
1. Android 4.0 網絡編程詳解 王家林
2. 計算機網絡(第7版)謝希仁

 

HTTPWatch工具使用參考:https://www.cnblogs.com/zhuhongbao/p/3230046.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM