小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

HTTP請(qǐng)求流程(一)

 閑來看看 2011-09-19

      最近一直在研究如何讓asp.net實(shí)現(xiàn)上傳大文件的功能,所以都沒怎么寫技術(shù)類的文章了??上У氖侵两襁€沒研究出來,慚愧~~~。不過因?yàn)檫@樣,也了解了一下http消息請(qǐng)求的大致過程。我就先簡(jiǎn)單介紹下,然后再來講如何利用Telnet來模擬Http請(qǐng)求。講得不對(duì)的地方還希望大家給我指出來。因?yàn)閮?nèi)容比較多,所以分成兩部分來寫。
      1、流程簡(jiǎn)介
      2、Telnet模擬HTTP請(qǐng)求


      這篇我們就來做一個(gè)簡(jiǎn)單介紹。
      先提個(gè)問題:當(dāng)我們?cè)跒g覽器的地址欄中輸入"http://www.baidu.com/",然后按"回車",這之后發(fā)生了什么事?這里先不回答,大家接著往下看先。

      我們來分析一下:

      ·HTTP請(qǐng)求流程

      首先,http屬于Tcp/Ip模型中的應(yīng)用層協(xié)議,而兩個(gè)應(yīng)用程序(我們這里指的就是瀏覽器與服務(wù)器)之間要進(jìn)行互相通信,首先得建立Tcp連接,然后瀏覽器才能向服務(wù)器發(fā)送請(qǐng)求信息,服務(wù)器在接受到請(qǐng)求信息后,返回相應(yīng)的應(yīng)答信息,瀏覽器接收到來自服務(wù)器的應(yīng)答信息后,對(duì)這些數(shù)據(jù)進(jìn)行解釋執(zhí)行。

      在http 1.0的版本中,瀏覽器的每次請(qǐng)求(也就是對(duì)每一個(gè)頁面的訪問)都要求建立一次單獨(dú)的連接,在處理完每一次的請(qǐng)求后,就自動(dòng)釋放連接。(這點(diǎn)我們應(yīng)該都有感覺,比如我們?cè)L問一個(gè)頁面,當(dāng)該頁面在瀏覽器中顯示出來的時(shí)候,我們可以拔掉網(wǎng)線,此時(shí)該頁面上的信息并不會(huì)丟失。)而當(dāng)我們請(qǐng)求的網(wǎng)頁文件中有很多圖片、音樂、電影等信息時(shí),服務(wù)器返回的信息中并不直接包含圖片數(shù)據(jù),而只是保存該圖片的鏈接,當(dāng)瀏覽器進(jìn)行解釋的時(shí)候,遇到圖片的url時(shí),才向服務(wù)器發(fā)出對(duì)圖片的請(qǐng)求信息??梢娙绻粋€(gè)網(wǎng)頁中包含多個(gè)圖片數(shù)據(jù)時(shí),將會(huì)頻繁的與服務(wù)器建立連接,與釋放連接,這無疑會(huì)造成資源的浪費(fèi)。


                                                                                        http 1.0 請(qǐng)求模式

      而http 1.1則可以在一次連接中處理多個(gè)請(qǐng)求,并且多個(gè)請(qǐng)求可以重疊進(jìn)行,不需要等待一個(gè)請(qǐng)求結(jié)束后再發(fā)送下一個(gè)請(qǐng)求。

      ·HTTP請(qǐng)求消息

      1次完整的http請(qǐng)求消息包括:一個(gè)請(qǐng)求行、若干消息頭以及實(shí)體內(nèi)容,而消息頭和實(shí)體內(nèi)容可以沒有,消息頭和實(shí)體內(nèi)容間有一個(gè)空行。
      我們來看一個(gè)例子(為了便于說明,我在每行前加了序號(hào)):
            1 Get /mattmarg/ HTTP/1.0
            2 User-Agent: Mozilla/2.0 (Macintosh; I; PPC)
            3 Accept: text/html; */*
            4 Cookie: name = value
            5 Referer: http://www.XXX.com/a.html
      其中,第1行就是請(qǐng)求行:請(qǐng)求方式為Get(除了Get之外,還有Post、Put、Delete方式),請(qǐng)求的文件位于"根目錄/mattmarg/"下,當(dāng)然也可以直接給出需要的頁面(如:/mattmarg/index.asp,也可以加上一些其它字段 如:/mattmarg/index.asp?id=1&uid=xxx。當(dāng)我們通過Get請(qǐng)求時(shí),提交給服務(wù)器的請(qǐng)求行長(zhǎng)度不能超過1K,而如果利用Post方式,則是把所提交的信息以實(shí)體內(nèi)容形式發(fā)送給服務(wù)器,所以如果服務(wù)器沒有限制的話,原則上講可以傳輸無限大的內(nèi)容),HTTP/1.0 表示了http的版本為1.0。其余幾行就是消息頭了,消息頭主要是用來向服務(wù)器傳達(dá)某種信息或指示。如告訴服務(wù)器自己的終端(User-Agent)是什么(如果是瀏覽器則返回相應(yīng)的瀏覽器型號(hào)),終端所可以解釋的類型(Accept)是什么,是從哪個(gè)頁面提交的請(qǐng)求(Referer),以及瀏覽器所能解釋的語言(Accept-Language)等等。我們這里拿Accept-Language來舉個(gè)例子,大家都知道google在中國大陸顯示的是簡(jiǎn)體中文,而在其它的國家則顯示對(duì)應(yīng)的語言,這個(gè)是怎么做到的呢?其實(shí)就是瀏覽器向服務(wù)器遞交的請(qǐng)求信息中包含了Accept-Language,而我們的瀏覽器默認(rèn)是zh-cn,然后服務(wù)器在接受到該信息時(shí)返回對(duì)應(yīng)的頁面。
      我們可以通過以下方法來驗(yàn)證一下:
      1、打開瀏覽器->工具->internet選項(xiàng)->常規(guī)選項(xiàng)卡
      2、選擇"語言",可見默認(rèn)的語言是中文

      3、選擇"添加",選擇一種語言,然后調(diào)節(jié)一下優(yōu)先順序

      4、確定之后,我們?cè)僭L問一下http://www.google.com/,是不是發(fā)現(xiàn)原來的簡(jiǎn)體中文全都成了繁體字了。

      ·HTTP響應(yīng)消息

      
Http響應(yīng)消息的格式為:一個(gè)狀態(tài)行、若干消息頭和實(shí)體內(nèi)容,其中消息頭和實(shí)體內(nèi)容可以沒有,消息頭和實(shí)體內(nèi)容間有一個(gè)空行。
      我們依舊先來看一個(gè)例子:
            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 <html><head></head><body>adfasfa</body></html>
      其中,01行是狀態(tài)行,用于顯示服務(wù)器響應(yīng)的狀態(tài),HTTP/1.1顯示了對(duì)應(yīng)的http協(xié)議版本,200為狀態(tài)數(shù)字,OK為狀態(tài)信息用于解釋狀態(tài)數(shù)字(這里OK對(duì)應(yīng)200,表示請(qǐng)求正常);02~09是消息頭部分,10為空行,11為實(shí)體內(nèi)容(也就是服務(wù)器返回的網(wǎng)頁內(nèi)容)。

      好了,相信大家應(yīng)該已經(jīng)對(duì)這個(gè)http請(qǐng)求的流程有了一個(gè)大概的了解了吧,那么我們反過來回答下最初留下的問題:當(dāng)我們?cè)跒g覽器的地址欄中輸入 " http://www.baidu.com/ " ,然后按"回車",這之后發(fā)生了什么事?。

      首先,瀏覽器找到該網(wǎng)址所指向的IP,然后與其建立TCP連接,接著向百度服務(wù)器提出Get請(qǐng)求,當(dāng)服務(wù)器接收到我們的請(qǐng)求后,向我們傳送應(yīng)答信息--百度的頁面,然后斷開連接。

      [補(bǔ)充]以上文章中主要是描述HTTP請(qǐng)求的大致流程,至于HTTP之前所建立的一系列連接,只用了"瀏覽器找到該網(wǎng)址所指向的IP,然后與其建立TCP連接"這句話或類似的話來帶過。根據(jù)朋友們的回復(fù)顯得這個(gè)說法不是很恰當(dāng)。所以我在這里再補(bǔ)充些東西。
       1、獲取IP。瀏覽器地址欄中輸入"http://www./"并提交之后,首先它會(huì)在DNS本地緩存表中查找,如果有則直接告訴IP地址。如果沒有則要求網(wǎng)關(guān)DNS進(jìn)行查找,如此下去,當(dāng)找到對(duì)應(yīng)的ip后,則返回給瀏覽器。
       2、建立TCP連接。當(dāng)獲取到IP之后,就開始與所請(qǐng)求的服務(wù)器建立TCP連接,你可以在下圖中發(fā)現(xiàn)syn,ack,這些標(biāo)識(shí)符就是用來同步用的。
       3、連接建立后,就向服務(wù)器發(fā)出http請(qǐng)求(大家可以從圖中看出來)。如果是HTTP1.0的版本則,每一次請(qǐng)求結(jié)束后,就釋放TCP連接。


(上圖中,由于是第一次訪問網(wǎng)站,無法在本地找到對(duì)應(yīng)IP)


(短時(shí)間內(nèi),第二次訪問同一網(wǎng)站)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多