最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧~~~。不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我指出來。因為內容比較多,所以分成兩部分來寫。
1、流程簡介
2、telnet模擬http請求
這篇我們就來做乙個簡單介紹。
先提個問題:當我們在瀏覽器的位址列中輸入"",然後按"回車",這之後發生了什麼事?這裡先不回答
我們來分析一下:
·http請求流程
首先,http屬於tcp/ip模型中的應用層協議,而兩個應用程式(我們這裡指的就是瀏覽器與伺服器)之間要進行互相通訊,首先得建立tcp連線,然後瀏覽器才能向伺服器傳送請求資訊,伺服器在接受到請求資訊後,返回相應的應答資訊,瀏覽器接收到來自伺服器的應答資訊後,對這些資料進行解釋執行。
在http 1.0的版本中,瀏覽器的每次請求(也就是對每乙個頁面的訪問)都要求建立一次單獨的連線,在處理完每一次的請求後,就自動釋放連線。(這點我們應該都有感覺,比如我們訪問乙個頁面,當該頁面在瀏覽器中顯示出來的時候,我們可以拔掉網線,此時該頁面上的資訊並不會丟失。)而當我們請求的網頁檔案中有很多、**、電影等資訊時,伺服器返回的資訊中並不直接包含資料,而只是儲存該的鏈結,當瀏覽器進行解釋的時候,遇到的url時,才向伺服器發出對的請求資訊。可見如果乙個網頁中包含多個資料時,將會頻繁的與伺服器建立連線,與釋放連線,這無疑會造成資源的浪費。
http 1.0 請求模式
而http 1.1則可以在一次連線中處理多個請求,並且多個請求可以重疊進行,不需要等待乙個請求結束後再傳送下乙個請求。
·http請求訊息
1次完整的http請求訊息包括:乙個請求行、若干訊息頭以及實體內容,而訊息頭和實體內容可以沒有,訊息頭和實體內容間有乙個空行。
我們來看乙個例子(為了便於說明,我在每行前加了序號):
其中,第1行就是請求行:請求方式為get(除了get之外,還有post、put、delete方式),請求的檔案位於"根目錄/mattmarg/"下,當然也可以直接給出需要的頁面(如:/mattmarg/index.asp,也可以加上一些其它字段 如:/mattmarg/index.asp?id=1&uid=***。當我們通過get請求時,提交給伺服器的請求行長度不能超過1k,而如果利用post方式,則是把所提交的資訊以實體內容形式傳送給伺服器,所以如果伺服器沒有限制的話,原則上講可以傳輸無限大的內容),http/1.0 表示了http的版本為1.0。其餘幾行就是訊息頭了,訊息頭主要是用來向伺服器傳達某種資訊或指示。如告訴伺服器自己的終端(user-agent)是什麼(如果是瀏覽器則返回相應的瀏覽器型號),終端所可以解釋的型別(accept)是什麼,是從哪個頁面提交的請求(referer),以及瀏覽器所能解釋的語言(accept-language)等等。我們這裡拿accept-language來舉個例子,大家都知道google在中國大陸顯示的是簡體中文,而在其它的國家則顯示對應的語言,這個是怎麼做到的呢?其實就是瀏覽器向伺服器遞交的請求資訊中包含了accept-language,而我們的瀏覽器預設是zh-cn,然後伺服器在接受到該資訊時返回對應的頁面。
我們可以通過以下方法來驗證一下:
1、開啟瀏覽器->工具->internet選項->常規選項卡
2、選擇"語言",可見預設的語言是中文
3、選擇"新增",選擇一種語言,然後調節一下優先順序
4、確定之後,我們再訪問一下
是不是發現原來的簡體中文全都成了繁體字了。
·http響應訊息
http響應訊息的格式為:乙個狀態行、若干訊息頭和實體內容,其中訊息頭和實體內容可以沒有,訊息頭和實體內容間有乙個空行。
我們依舊先來看乙個例子:
其中,01行是狀態行,用於顯示伺服器響應的狀態,http/1.1顯示了對應的http協議版本,200為狀態數字,ok為狀態資訊用於解釋狀態數字(這裡ok對應200,表示請求正常);02~09是訊息頭部分,10為空行,11為實體內容(也就是伺服器返回的網頁內容)。
好了,相信大家應該已經對這個http請求的流程有了乙個大概的了解了吧,那麼我們反過來回答下最初留下的問題:當我們在瀏覽器的位址列中輸入 "
(上圖中,由於是第一次訪問**,無法在本地找到對應ip)
(短時間內,第二次訪問同一**)
參考:1.張孝祥老師的http協議詳解
2.
HTTP請求流程(一) 流程簡介
http請求流程 一 流程簡介 最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧 不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我...
HTTP請求流程(一) 流程簡介
最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧 不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我指出來。因為內容比較多,所以分成...
HTTP請求流程(一) 流程簡介
最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧 不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我指出來。因為內容比較多,所以分成...