首先,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 200 ok 02 server: microsoft-iis/5.1 03 x-powered-by: asp.net 04 date: sun, 06 jul 2008 11:01:21 gmt 05 content-type: text/html 06 accept-ranges: bytes 07 last-modified: wed, 02 jul 2008 01:01:26 gmt 08 etag: "0f71527dfdbc81:ade" 09 content-length: 46 10 11 adfasfa< /body> 其中,01行是狀態行,用於顯示伺服器響應的狀態,http/1.1顯示了對應的http協議版本,200為狀態數字,ok為狀態資訊用於解釋狀態數字(這裡ok對應200,表示請求正常);02~09是訊息頭部分,10為空行,11為實體內容(也就是伺服器返回的網頁內容)。 好了,相信大家應該已經對這個http請求的流程有了乙個大概的了解了吧,那麼我們反過來回答下最初留下的問題:當我們在瀏覽器的位址列中輸入 "
80",回車後 ,螢幕為全黑,此時我們利用快捷鍵"ctrl+](右中括號)"來開啟本地回顯功能,這樣我們就可以看見我們所打的東西了,如圖:(注本階段執行過程和以下的過程均要求操作時間盡可能短,因為時間一長,便會被認為斷開連線。)
3、單擊回車,進行編輯狀態。 4、輸入:"get / http/1.1"後回車,在第二段接著輸入:"host:"然後按回車,這樣乙個簡單的http請求就完成了,接著我人只要再按下回車,便向伺服器遞交這個請求了。如圖:(我們來看一下這個是什麼意思:get表示請求方式,/表示請求的根目錄下的檔案,http/1.1表示http協議版本,host就是乙個訊息頭,據某些朋友說1.1的版本一定要加乙個"host:"可是我實驗後發現"host :"不加仍舊可以正常傳送請求,但是get http這個必須大寫,否則就該請求無法傳送)
5、接收伺服器返回,這步其實不需要我們來做,因為當我們傳送請求後,只需幾秒鐘,我們便會收到來自伺服器反應.
http://www.baidu.com/s?wd=1.看看請求是怎麼樣的
HTTP請求流程
最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧 不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我指出來。因為內容比較多,所以分成...
HTTP請求流程
http請求流程 一 流程簡介 最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧 不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我...
HTTP請求流程
最近一直在研究如何讓asp.net實現上傳大檔案的功能,所以都沒怎麼寫技術類的文章了。可惜的是至今還沒研究出來,慚愧 不過因為這樣,也了解了一下http訊息請求的大致過程。我就先簡單介紹下,然後再來講如何利用telnet來模擬http請求。講得不對的地方還希望大家給我指出來。因為內容比較多,所以分成...