代理服務(wù)器是HTTP協(xié)議中一個重要的組件,發(fā)揮著重要的作用。 關(guān)于HTTP代理的文章有很多,本文不再贅述,如果不清楚的可以看一下
本文主要介紹代理的事例,分析一個真實的案例來幫助理解HTTP代理的原理。
HTTP代理的原理
下面分析一個
http://iflow.uczzd.cn/iflow/api/v1/client_event?app=uc-iflow...經(jīng)過代理服務(wù)器的HTTP請求。
iflow.uczzd.cn的公網(wǎng)IP是140.205.136.82(各地測試到的IP有可能不同),我的局域網(wǎng)IP是192.168.100.115,代理服務(wù)器的IP是192.168.16.35。
再簡單說一下HTTP請求的流程:
192.168.100.115向140.205.136.82發(fā)送HTTP請求,其中192.168.16.35是代理服務(wù)器。
一、 監(jiān)控請求
通過網(wǎng)絡(luò)監(jiān)控獲取到的HTTP請求如下:

可以看到在網(wǎng)絡(luò)監(jiān)控中,有兩個HTTP請求,一個是向代理服務(wù)器發(fā)送的HTTP,另一個是代理服務(wù)器想目標(biāo)服務(wù)器發(fā)送的HTTP請求。這兩個請求的請求體是一樣的,如下圖:
客戶端向代理服務(wù)器發(fā)送的HTTP報文:

代理服務(wù)器想目標(biāo)服務(wù)器發(fā)送的HTTP報文:

二、 推測處理流程
可以看到,兩張圖片的HTTP報文是相同的(也有可能Header不同),我們可以推測出客戶端和代理服務(wù)器的處理流程,如下:
客戶端的處理流程:

代理服務(wù)器的處理流程:

三、 驗證推測的處理流程
在推測出客戶端和代理服務(wù)器的處理邏輯后,我們需要驗證我們的推測是否正確。
我們可以構(gòu)造一個TCP請求,客戶端連接到代理服務(wù)器,發(fā)送HTTP報文,報文的內(nèi)容是客戶端直接發(fā)送到服務(wù)器的內(nèi)容。
例如:直接訪問
http://www.cnblogs.com/tgwang/的HTTP報文是:
GET http://www.cnblogs.com/tgwang/ HTTP/1.1
Host: www.cnblogs.com
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
Referer: http://www.cnblogs.com/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: ***
If-Modified-Since: Sat, 30 Jan 2016 02:48:23 GMT
我們構(gòu)造一個TCP請求,連接代理服務(wù)器,報文的內(nèi)容也是發(fā)送上面的報文,看代理服務(wù)器能否正常請求博客園的數(shù)據(jù),如果可以正常請求,說明我們對于客戶端和代理服務(wù)器推測是正確的,如果沒有請求博客園數(shù)據(jù),而是返回代理服務(wù)器的相關(guān)信息,表示推測錯誤。
下面我使用python向代理服務(wù)器127.0.0.1:8888發(fā)送一個TCP請求,為了在代理服務(wù)器中能找到此請求,我在Header中增加了一個Token,使用UUID標(biāo)識(見紅框)。

運行程序,發(fā)送TCP請求,報文如下:

查看代理服務(wù)器的信息,可知,HTTP請求正常發(fā)送到博客園,并且正常響應(yīng),如下圖:

到此推測驗證完成,符合預(yù)期結(jié)果。