HTTP協(xié)議簡(jiǎn)介_(kāi)第1頁(yè)
HTTP協(xié)議簡(jiǎn)介_(kāi)第2頁(yè)
HTTP協(xié)議簡(jiǎn)介_(kāi)第3頁(yè)
HTTP協(xié)議簡(jiǎn)介_(kāi)第4頁(yè)
HTTP協(xié)議簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1. HTTP協(xié)議簡(jiǎn)介 i. HTTP協(xié)議簡(jiǎn)介 ii. HTTP的請(qǐng)求 iii. HTTP的響應(yīng) 2. 與HTTP相關(guān)類(lèi)的簡(jiǎn)介 i. WebRequest類(lèi) ii. WebResponse類(lèi) iii. HttpWebRequest類(lèi) iv. HttpWebResponse類(lèi) v. Uri類(lèi) HTTP協(xié)議簡(jiǎn)介HTTP協(xié)議簡(jiǎn)介在TCP/IP體系結(jié)構(gòu)中,HTTP屬于應(yīng)用層協(xié)議,位于TCP/IP協(xié)議的頂層。瀏覽Web時(shí),瀏覽器通過(guò)HTTP協(xié) 議與Web服務(wù)器交換信息。這些信息(文檔)類(lèi)型的格式由MIME定義。HTTP協(xié)議具有以下的特點(diǎn):1. HTTP按客戶(hù)/服務(wù)器模式工作HTTP支持客戶(hù)(一般情況是瀏

2、覽器)與服務(wù)器的通訊,相互傳輸數(shù)據(jù)。HTTP定義的事務(wù)處理由 以下四步組成: o 客戶(hù)與服務(wù)器建立連接; o 客戶(hù)向服務(wù)器提出請(qǐng)求; o 如果請(qǐng)求被接受,則服務(wù)器送回響應(yīng),在響應(yīng)中包括狀態(tài)碼和所需的文件; o 客戶(hù)與服務(wù)器斷開(kāi)連接 一次HTTP操作稱(chēng)為一次事務(wù)(transaction)。2. HTTP是無(wú)狀態(tài)的也就是說(shuō),瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作,就建立一次連接,但任務(wù)結(jié)束就中斷連接。 3. HTTP使用元信息作為頭標(biāo)HTTP對(duì)所有事務(wù)都加了頭標(biāo)(header)。也就是說(shuō), 在主要數(shù)據(jù)前加上一塊信息,稱(chēng)為元信息(metainformation)。它使服務(wù)器能夠提供正在傳送數(shù)據(jù)的有 關(guān)

3、信息。例如,傳送對(duì)象是哪種類(lèi)型,是用哪種語(yǔ)言書(shū)寫(xiě)的等。從功能上講,HTTP支持四類(lèi)元信息:一般信息頭標(biāo)、請(qǐng)求頭標(biāo)、響應(yīng)頭標(biāo)和實(shí)體頭標(biāo)。 4. HTTP支持兩種請(qǐng)求和響應(yīng)格式HTTP由不同的兩部分組成,一是從瀏覽器發(fā)往服務(wù)器的請(qǐng)求,二是服務(wù)器對(duì)客戶(hù)的響應(yīng)。HTTP 支持兩種請(qǐng)求和響應(yīng),即簡(jiǎn)單請(qǐng)求與完全請(qǐng)求和簡(jiǎn)單響應(yīng)與完全響應(yīng)。 5. HTTP是基于文本的簡(jiǎn)單協(xié)議 HTTP的請(qǐng)求HTTP的常用請(qǐng)求方法:方 法說(shuō) 明GET請(qǐng)求讀取一個(gè)Web頁(yè)面HEAD請(qǐng)求讀取一個(gè)Web頁(yè)面的頭標(biāo)PUT請(qǐng)求存儲(chǔ)一個(gè)Web頁(yè)面POST附加到命名資源中DELETE刪除Web頁(yè)面LINK連接兩個(gè)已有資源UNLINK取消兩個(gè)

4、資源之間的已有連接HTTP請(qǐng)求的格式如下所示:request-lineheadersblank linerequest-body在HTTP請(qǐng)求中,第一行必須是一個(gè)請(qǐng)求行(request line),用來(lái)說(shuō)明請(qǐng)求類(lèi)型、要訪(fǎng)問(wèn)的資源以及使用的HTTP版本。緊接著是一個(gè)首部(header)小節(jié),用來(lái)說(shuō)明服務(wù)器要使用的附加信息。在首部之 后是一個(gè)空行,再此之后可以添加任意的其他數(shù)據(jù)稱(chēng)之為主體(body)。在HTTP中,定義了大量的請(qǐng)求類(lèi)型,不過(guò)Ajax開(kāi)發(fā)人員關(guān)心的 只有GET請(qǐng)求和POST請(qǐng)求。只要在Web瀏覽器上輸入一個(gè)URL,瀏覽器就將基于該URL向服務(wù)器發(fā)送一個(gè)GET請(qǐng)求,以告訴服務(wù)器獲取并返

5、回什么資 源。對(duì)于的GET請(qǐng)求如下所示:GET / HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive 請(qǐng)求行的第一部分說(shuō)明了該請(qǐng)求是GET請(qǐng)求。該行的第二部分是一個(gè)斜杠(/),用來(lái)說(shuō)明請(qǐng)求的是該域名的根目錄。該行的最后一部分說(shuō)明使用的是 HTTP 1.1版本(另一個(gè)可選項(xiàng)是1.0)。那么請(qǐng)求發(fā)到哪里去呢?這就是第二行的內(nèi)容。第 2行是請(qǐng)求的第一個(gè)首部,HOST。首部HOST將指出

6、請(qǐng)求的目的地。結(jié)合HOST和上一行中的斜杠(/),可以通知服務(wù)器請(qǐng)求的是 1.1才需要使用首部HOST,而原來(lái)的1.0版本則不需要使用)。第三行中包含的是首部User-Agent,服務(wù)器端和客戶(hù)端腳本都能夠訪(fǎng)問(wèn)它,它是 瀏覽器類(lèi)型檢測(cè)邏輯的重要基礎(chǔ)。該信息由你使用的瀏覽器來(lái)定義(在本例中是Firefox 1.0.1),并且在每個(gè)請(qǐng)求中將自動(dòng)發(fā)送。最后一行是首部Connection,通常將瀏覽器操作設(shè)置為Keep-Alive(當(dāng)然也可以設(shè)置為其他 值,但這已經(jīng)超出了本書(shū)討論的范圍)。注意,在最后一個(gè)首部之后有一個(gè)空行。即使不存在請(qǐng)求主體,這個(gè)空行也是必需的。如果要獲取一個(gè)諸如GET /books

7、/ HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive注意只有第一行的內(nèi)容發(fā)生了變化,它只包含URL中后面的部分。要發(fā)送GET請(qǐng)求的參數(shù),則必須將這些額外的信息附在URL本身的后面。其格式類(lèi)似于:URL ? name1=value1&name2=value2&.&nameN=valueN該信息稱(chēng)之為查詢(xún)字符串(query string),它將會(huì)復(fù)制在HTTP

8、請(qǐng)求的請(qǐng)求行中,如下所示:GET /books/?name=Professional%20Ajax HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive另一方面,POST請(qǐng)求在請(qǐng)求主體中為服務(wù)器提供了一些附加的信息。通常,當(dāng)填寫(xiě)一個(gè)在線(xiàn)表單并提交它時(shí),這些填入的數(shù)據(jù)將以POST請(qǐng)求的方式發(fā) 送給服務(wù)器。以下就是一個(gè)典型的POST請(qǐng)求:POST / HTTP/1.1Host: User

9、-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Content-Type: application/x-www-form-urlencodedContent-Length: 40Connection: Keep-Alivename=Professional%20Ajax&publisher=Wiley從上面可以發(fā)現(xiàn), POST請(qǐng)求和GET請(qǐng)求之間有一些區(qū)別。首先,請(qǐng)求行開(kāi)始處的GET改為了POST,以表示不同的請(qǐng)求類(lèi)型。你會(huì)發(fā)現(xiàn)首部Host和User

10、- Agent仍然存在,在后面有兩個(gè)新行。其中首部Content-Type說(shuō)明了請(qǐng)求主體的內(nèi)容是如何編碼的。瀏覽器始終以application/ x-www-form- urlencoded的格式編碼來(lái)傳送數(shù)據(jù),這是針對(duì)簡(jiǎn)單URL編碼的MIME類(lèi)型。首部Content-Length說(shuō)明了請(qǐng)求主體的字節(jié)數(shù)。在首部 Connection后是一個(gè)空行,再后面就是請(qǐng)求主體。與大多數(shù)瀏覽器的POST請(qǐng)求一樣,這是以簡(jiǎn)單的“名稱(chēng)值”對(duì)的形式給出的,其中name是 Professional Ajax,publisher是Wiley。你可以以同樣的格式來(lái)組織URL的查詢(xún)字符串參數(shù)。正如前面所提到的,還有其他的

11、HTTP請(qǐng)求類(lèi)型,它們遵從的基本格式與GET請(qǐng)求和POST請(qǐng)求相同。下一步我們來(lái)看看服務(wù)器將對(duì)HTTP請(qǐng)求發(fā)送 什么響應(yīng)。HTTP響應(yīng)如下所示,HTTP響應(yīng)的格式與請(qǐng)求的格式十分類(lèi)似:status-lineheadersblank lineresponse-body正如你所見(jiàn),在響應(yīng)中唯一真正的區(qū)別在于第一行中用狀態(tài)信息代替了請(qǐng)求信息。狀態(tài)行(status line)通過(guò)提供一個(gè)狀態(tài)碼來(lái)說(shuō)明所請(qǐng)求的資源情況。以下就是一個(gè)HTTP響應(yīng)的例子:HTTP/1.1 200 OKDate: Sat, 31 Dec 2005 23:59:59 GMTContent-Type: text/html;char

12、set=ISO-8859-1Content-Length: 122htmlheadtitleWrox Homepage/title/headbody!- body goes here -/body/html在本例中,狀態(tài)行給出的HTTP狀態(tài)代碼是200,以及消息OK。狀態(tài)行始終包含的是狀態(tài)碼和相應(yīng)的簡(jiǎn)短消息,以避免混亂。最常用的狀態(tài)碼有:· 200 (OK): 找到了該資源,并且一切正常。 · 304 (NOT MODIFIED): 該資源在上次請(qǐng)求之后沒(méi)有任何修改。這通常用于瀏覽器的緩存機(jī)制。 · 401 (UNAUTHORIZED):客戶(hù)端無(wú)權(quán)訪(fǎng)問(wèn)該資源。這通

13、常會(huì)使得瀏覽器要求用戶(hù)輸入用戶(hù)名和密碼,以登錄到服務(wù)器。 · 403 (FORBIDDEN):客戶(hù)端未能獲得授權(quán)。這通常是在401之后輸入了不正確的用戶(hù)名或密碼。 · 404 (NOT FOUND):在指定的位置不存在所申請(qǐng)的資源。 在狀態(tài)行之后是一些首部。通常,服務(wù)器會(huì)返回一個(gè)名為Date的首部,用來(lái)說(shuō)明響應(yīng)生成的日期和時(shí)間(服務(wù)器通常還會(huì)返回一些關(guān)于其自身的信息,盡 管并非是必需的)。接下來(lái)的兩個(gè)首部大家應(yīng)該熟悉,就是與POST請(qǐng)求中一樣的Content-Type和Content-Length。在本例中,首部 Content-Type指定了MIME類(lèi)型HTML(text

14、/html),其編碼類(lèi)型是ISO-8859-1(這是針對(duì)美國(guó)英語(yǔ)資源的編碼標(biāo)準(zhǔn))。響 應(yīng)主體所包含的就是所請(qǐng)求資源的HTML源文件(盡管還可能包含純文本或其他資源類(lèi)型的二進(jìn)制數(shù)據(jù))。瀏覽器將把這些數(shù)據(jù)顯示給用戶(hù)。注意,這 里并沒(méi)有指明針對(duì)該響應(yīng)的請(qǐng)求類(lèi)型,不過(guò)這對(duì)于服務(wù)器并不重要??蛻?hù)端知道每種類(lèi)型的請(qǐng)求將返回什么類(lèi)型的數(shù)據(jù),并決定如何使用這些數(shù)據(jù)。與HTTP相關(guān)類(lèi)的簡(jiǎn)介WebRequest類(lèi)WebRequest 是 .NET Framework 的用于訪(fǎng)問(wèn) Internet 數(shù)據(jù)的請(qǐng)求/響應(yīng)模型的抽象基類(lèi)。使用該請(qǐng)求/響應(yīng)模型的應(yīng)用程序可以用協(xié)議不可知的方式從 Internet 請(qǐng)求數(shù)據(jù)。在

15、這種方式下,應(yīng)用程序處理 WebRequest 類(lèi)的實(shí)例,而協(xié)議特定的子類(lèi)則執(zhí)行請(qǐng)求的具體細(xì)節(jié)。請(qǐng)求從應(yīng)用程序發(fā)送到某個(gè)特定的 URI,如服務(wù)器上的 Web 頁(yè)。URI 從一個(gè)為應(yīng)用程序注冊(cè)的 WebRequest 子代列表中確定要?jiǎng)?chuàng)建的適當(dāng)子類(lèi)。注冊(cè) WebRequest 子代通常是為了處理某個(gè)特定的協(xié)議(如 HTTP 或 FTP),但是也可以注冊(cè)它以處理對(duì)特定服務(wù)器或服務(wù)器上的路徑的請(qǐng)求。由于 WebRequest 類(lèi)是一個(gè)抽象類(lèi),所以 WebRequest 實(shí)例在運(yùn)行時(shí)的實(shí)際行為由 WebRequest.Create 方法所返回的子類(lèi)確定。注 意 使用 Create 方法初始化新的 We

16、bRequest 實(shí)例。不要使用 WebRequest 構(gòu)造函數(shù)。下面的示例說(shuō)明如何創(chuàng)建 WebRequest 實(shí)例并返回響應(yīng)。/ Initialize the WebRequest.WebRequest myRequest = WebRequest.Create("");/ Return the response. WebResponse myResponse = myRequest.GetResponse();/ Code to use the WebResponse goes here./ Close the response to free resources.my

17、Response.Close();WebResponse類(lèi)WebResponse 類(lèi)是抽象(在 Visual Basic 中為 MustInherit) 基類(lèi),協(xié)議特定的響應(yīng)類(lèi)從該抽象基類(lèi)派生。應(yīng)用程序可以使用 WebResponse 類(lèi)的實(shí)例以協(xié)議不可知的方式參與請(qǐng)求和響應(yīng)事務(wù),而從 WebResponse 派生的協(xié)議特定的類(lèi)攜帶請(qǐng)求的詳細(xì)信息??蛻?hù)端應(yīng)用程序不直接創(chuàng)建 WebResponse 對(duì)象,而是通過(guò)調(diào)用 WebRequest 實(shí)例上的 GetResponse 方法來(lái)創(chuàng)建它。下面的示例從 WebRequest 創(chuàng)建 WebResponse 實(shí)例。/ Initialize the We

18、bRequest.WebRequest myRequest = WebRequest.Create("");/ Return the response. WebResponse myResponse = myRequest.GetResponse();/ Code to use the WebResponse goes here./ Close the response to free resources.myResponse.Close();HttpWebRequest類(lèi)HttpWebRequest 類(lèi)對(duì) WebRequest 中定義的屬性和方法提供支持,也對(duì)使用戶(hù)能夠直

19、接與使用 HTTP 的服務(wù)器交互的附加屬性和方法提供支持。不要使用 HttpWebRequest 構(gòu)造函數(shù)。使用 WebRequest.Create 方法初始化 HttpWebRequest 的一個(gè)新實(shí)例。如果 URI 的方案是 http:/ 或 https:/,則 Create 將返回 HttpWebRequest 實(shí)例。GetResponse 方法向 RequestUri 屬性中指定的 Internet 資源發(fā)出同步請(qǐng)求并返回包含該響應(yīng)的 HttpWebResponse 實(shí)例??梢允褂?BeginGetResponse 和 EndGetResponse 方法對(duì) Internet 資源發(fā)出異

20、步請(qǐng)求。當(dāng)要向 Internet 資源發(fā)送數(shù)據(jù)時(shí),GetRequestStream 方法返回用于發(fā)送數(shù)據(jù)的Stream實(shí)例。BeginGetRequestStream 和 EndGetRequestStream 方法提供對(duì)發(fā)送數(shù)據(jù)流的異步訪(fǎng)問(wèn)。下面的示例為 URI 創(chuàng)建 HttpWebRequest。HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("HttpWebResponse類(lèi)此類(lèi)包含對(duì) WebResponse 類(lèi)中的屬性和方法的 HTTP 特定用法的支持。HttpWebResponse 類(lèi)用于生成發(fā)送 HTTP

21、請(qǐng)求和接收 HTTP 響應(yīng)的 HTTP 獨(dú)立客戶(hù)端應(yīng)用程序。注 意:不要混淆 HttpWebResponse 和 HttpResponse; 后者用于 ASP.NET 應(yīng)用程序,而且它的方法和屬性是通過(guò) ASP.NET 的內(nèi)部 HttpResponse 對(duì)象公開(kāi)的。決不要直接創(chuàng)建 HttpWebResponse 類(lèi)的實(shí)例。而應(yīng)當(dāng)使用通過(guò)調(diào)用 HttpWebRequest.GetResponse 所返回的實(shí)例。從 Internet 資源返回的公共標(biāo)頭信息公開(kāi)為該類(lèi)的屬性。有關(guān)完整的列表,請(qǐng)參見(jiàn)下表??梢詮?Headers 屬性以名稱(chēng)/值對(duì)的形式讀取其他標(biāo)頭。下表顯示可以通過(guò) HttpWebRes

22、ponse 類(lèi)的屬性使用的公共 HTTP 標(biāo)頭。標(biāo)頭屬性Content-EncodingContentEncodingContent-LengthContentLengthContent-TypeContentTypeLast-ModifiedLastModified服務(wù)器Server通過(guò)調(diào)用 GetResponseStream 方法,以 Stream 的形式返回來(lái)自 Internet 資源的響應(yīng)的內(nèi)容。下面的示例返回 HttpWebRequest 的 HttpWebResponse:HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create("");HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();/ Insert code that uses the response object.HttpWResp.Close()U

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論