http協(xié)議及其post與get操作差異_第1頁
http協(xié)議及其post與get操作差異_第2頁
http協(xié)議及其post與get操作差異_第3頁
http協(xié)議及其post與get操作差異_第4頁
http協(xié)議及其post與get操作差異_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、http協(xié)議及其post與get操作差異引言http協(xié)議我想任何it人士都耳熟能詳了,大家都能說出個所以然 來。但是如果我問你http 協(xié)議的請求方法有哪些? post與get的差異? get或post傳送數(shù)據(jù)量的大小有限制嗎? http 響應(yīng)的狀態(tài)有哪些?以及在c#中你如何使用?如果你不能清楚地回答其中的大部分問題,那麼 這篇文章就是爲(wèi)你準(zhǔn)備的!大綱如下: 1、http 槪述o 1.1、http協(xié)議的客戶端與服務(wù)器的交互o 1.2、http 消息o 1.3、http請求的方法o 1.4、http響應(yīng)的代碼2、抓包分析 3、post與get的差異1、http槪述爲(wèi)了喚醒你對http協(xié)議的記憶或

2、使你能夠?qū)ttp協(xié)議有所瞭解,首先簡單一下http協(xié)議。 超文本傳輸協(xié)議(http,hypertext transfer protocol)是互聯(lián)網(wǎng)上應(yīng)用最爲(wèi)廣泛的一種網(wǎng)絡(luò)協(xié)議。 所有的www文件都必須遵守這個標(biāo)準(zhǔn)。設(shè)計http最初的目的是爲(wèi)了提供一種發(fā)布和接收 html;頁面的方法。http 的發(fā)展是萬維網(wǎng)協(xié)會(world wide web consortium)禾11 internet 工作小糸a. (imernel engineering task force)合作的結(jié)果,(他們)最終發(fā)佈了一系列的rfc,其中最著名的就是rfc 2616。rfc 2616定義了 http協(xié)議屮一個現(xiàn)今

3、被廣泛使用的版本一一http 1.1。1.1、http協(xié)議的客戶端與服務(wù)器的交互http是一個客戶端和服務(wù)器端請求和應(yīng)答的標(biāo)準(zhǔn)(匹£)。客戶端是終端用戶,服務(wù)器端是網(wǎng) 站。通過使用web瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具,客戶端發(fā)起一個到服務(wù)器上指定端口(默 認端爲(wèi)80)的http請求。(我們稱這個客戶端)調(diào)用戶代理(user agent)。應(yīng)答的服務(wù)器 上存儲著(一些)資源,比如html文件和圖像。(我們稱)這個應(yīng)答服務(wù)器爲(wèi)源服務(wù)器(origin server)。在用戶代理和源服務(wù)器中間可能存在多個中間層,比如代理,網(wǎng)關(guān),或者隧道(tunnel)。 儘管tcp/ip協(xié)議是互聯(lián)網(wǎng)上最流行

4、的應(yīng)用,http協(xié)議並沒有規(guī)定必須使用它和(基於)它支持 的層。事實上,http可以在任何其他互聯(lián)網(wǎng)協(xié)議上,或者在其他網(wǎng)絡(luò)上實現(xiàn)。http只假定(其 下膺協(xié)議提供)可靠的傳輸'任何能夠提供這種保證的協(xié)議都可以被其使用。通常,由http客戶端發(fā)起一個請求,建立一個到服務(wù)器指定端口(默認是80端口)的tcp 連接。http服務(wù)器則在那個端口監(jiān)聽客戶端發(fā)送過來的請求。一旦收到請求,服務(wù)器(向客 戶端)發(fā)回一個狀態(tài)行,比如”http/1.1 200 ok",和(響應(yīng)的)消息,消息的消息體可能是請求 的文件、錯誤消息、或者其它一些信息。http使用tcp而不是udp的原因在於(打開一個

5、)一個網(wǎng)頁必須傳送很多數(shù)據(jù)'而tcp協(xié)議 提供傳輸控制,按順序組織數(shù)據(jù)'和錯誤糾止。通過http或者https協(xié)議請求的資源由統(tǒng)一 資源標(biāo)識符(uniform resource identifiers »或者,更準(zhǔn)確一些,ur1)來標(biāo)識0客戶端與服務(wù)器端的結(jié)構(gòu)與交互過程可以表示爲(wèi)下面2張圖:圖1、web客戶端服務(wù)器端結(jié)構(gòu)(其中web服務(wù)器的超文本鏈接,即通過網(wǎng)站上的一個鏈接跳轉(zhuǎn)到了其他服務(wù)器上)internetweb服務(wù)器圖2、web客戶端與服務(wù)器端的交互1.2、http 消息 客戶端與服務(wù)器之間的交互用到了兩種類型的消息:請求(request)和響應(yīng)(respons

6、e)。http請求的格式爲(wèi):;request-line:headers (0個或多個)! < blank !ine>:body (只對post操作有效):request-line的格式:廠化訕.、? 0屮沈-1求1 http版本號request勺動作自tost、gft、head. put, oeletb> twce. options. connect圖3、http請求的格式http響應(yīng)的格式爲(wèi):從上面可以看出http的請求和響應(yīng)消息的首部均包含可變數(shù)量的字段,用一個空行(blank line 將所有首部字段(header)與消息主體(body)分隔開來。一個首部字段由字段名和

7、隨後的冒號、 一個空格和字段値組成,字段名不區(qū)分大小寫。報文頭可分爲(wèi)三類:一類應(yīng)用於請求,一類應(yīng)用於響應(yīng),還有一類描述主閤。有一些報文頭(例 如:date)既可用於請求又可用於響應(yīng)。描述主體的報文頭可以出現(xiàn)在post請求和所有響應(yīng)報 文屮° http的首部字段如下圖所示:首部名稱請求?響應(yīng)?至體?allowauthorizationcontent-encodingcontent-lengthcontent-typedateexpiresfromtf-modified-sincelast-modifiedlocationmime-versionpragmarefererserverus

8、er-agentwwwauthenticatewl 5、http首部字段1.3、http請求的方法http/l1協(xié)議中共定義了八種方法(有時也叫動作)來表明7?旳比弘口巳指定的資源的不同 操作方式: options返回服務(wù)器針對特定資源所支持的http請求方法。也可以利用向web服務(wù)器發(fā)送唆的 請求來測試服務(wù)器的功能性。 head向服務(wù)器索要與get請求札i一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在 不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。 get向特定的資源發(fā)出請求。注意:get方法不應(yīng)當(dāng)被用於產(chǎn)生副作用的操作中,例如在web application中。

9、其中一個原因是get可能會被網(wǎng)絡(luò)蜘蛛等隨意訪問。 post向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求 體中。post請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。 put向指定資源位置上傳其最新內(nèi)容。 delete請求服務(wù)器刪除心ga弘刃?/所標(biāo)識的資源。 trace回顯服務(wù)器收到的請求,主要用於測試或診斷。 connecthttp/1.1協(xié)議屮預(yù)留給能夠?qū)⑦B接改爲(wèi)管道方式的代理服務(wù)器。方法名稱是區(qū)分大小寫的。當(dāng)某個請求所針對的資源不支持對應(yīng)的請求方法的時候,服務(wù)器應(yīng)當(dāng) 返回狀態(tài)碼405 (method not allowed);當(dāng)服務(wù)器不認識或者不支持對

10、應(yīng)的請求方法的時候,應(yīng) 當(dāng)返回狀態(tài)碼 501 (not implemented) °http服務(wù)器至少應(yīng)該實現(xiàn)get和head方法,其他方法都是可選的。此外,徐了上述方法, 特定的http服務(wù)器還能夠擴展自定義的方法。安全方法開發(fā)者應(yīng)當(dāng)意識到他們的軟件代表了用戶在因特網(wǎng)上進行交互,並且應(yīng)當(dāng)告知用戶,他們止在進 行的操作可能對他們自身或者其他人有未曾預(yù)料的重要影響。特別地,對於get和head方法而言,除了進行獲取資源信息外,這些請求不應(yīng)當(dāng)再有任何其 他意義。也就是說,這些方法應(yīng)當(dāng)被認爲(wèi)是安全的,即所謂安全的意味著該操作用於獲取信 息而非修改信息??蛻舳藨?yīng)當(dāng)使用其他非安全方法,例如po

11、st、put及delete來以特殊 的方式(通常是按鈕而不是超鏈接)使得客戶能夠意識到可能要負的責(zé)任(例如一個按鈕帶來的 資金交易)或者被告知正在請求的操作可能是不安全的(例如某個文件將被上傳或刪除)。但是,不能想當(dāng)然地認爲(wèi)服務(wù)器不會在處理某個get請求時不會產(chǎn)生任何副作用。事實上,很 多動態(tài)資源會把這作爲(wèi)其特性。這裡重要的區(qū)別在於用戶並沒有請求這一副作用,因此不應(yīng)由用 戶爲(wèi)這些副作用承擔(dān)責(zé)任。幕等方法假如在不考慮諸如錯誤或者過期等問題的情況下,若干次請求的副作用與單次請求相同或者根 本沒有副作用,那麼這些請求方法就能夠被視作幕等的。get,head,put和delete 方法都有這樣的幕等屬

12、性,同樣由於根據(jù)協(xié)議» options,trace都不應(yīng)有副作用,因此也理 所當(dāng)然也是幕等的。假如某個由若干個請求做成的請求串行產(chǎn)生的結(jié)果在重複執(zhí)行這個請求串行或者其中任何一個 或多個請求後仍沒有發(fā)生變化,則這個請求串行便是幕等的。但是,可能出現(xiàn)若干個請求 做成的請求串行是非幕等的,即使這個請求串行中所有執(zhí)行的請求方法都是幕等的。例如, 這個請求串行的結(jié)果依賴於某個會在下次執(zhí)行這個串行的過程屮被修改的變量。1.4、http響應(yīng)的代碼服務(wù)器程序響應(yīng)的第一行叫狀態(tài)行。狀態(tài)行以http版本號開始,後面跟著3位數(shù)字表示響應(yīng)代 碼,最後是易讀的響應(yīng)短語°根據(jù)第一位可以把響應(yīng)分成5類:

13、響 應(yīng)說明lyz信息型,當(dāng)前不用 成功200ok.請求成功201ok.新的資源建立(post命令)202請求被接受.但處理未完成2040k.但沒有內(nèi)容返回重定向;需要用戶代理執(zhí)行更多的動作301所請求的資源已被指派為新的固定url302所請求的資源臨時位于另外的url304文檔沒有修改(條件get)客戶差錯400錯誤的請求401未被授權(quán);該請求要求用戶認證403不明原因的禁止404沒有找到服務(wù)器差錯500內(nèi)部服務(wù)器差錯501沒有實現(xiàn)502錯謀的網(wǎng)關(guān):網(wǎng)關(guān)或上游服務(wù)器來的無效響應(yīng)503服務(wù)暫時失效圖6、http響應(yīng)代碼2、抓包分析現(xiàn)在我們對http基本上算是瞭解了,下面我用wireshai-k抓

14、取打開博客園首頁時,我的電腦與 博客園服務(wù)器的交互過程的http數(shù)據(jù)包。做好準(zhǔn)備工作,關(guān)閉一些可能干擾我們抓取打開博客 園的相關(guān)程序°如下圖'我們在瀏覽器中輸人並確定時»首先抓到如下包:88222.92.u7.56222.92.117. s6172a8e63<18s88478 8.572808 4« & $90569486 s. 593564kttp/1.1 200 ok 二mttp/1.1 200 ok (t«xc/cs») http/1.1 200 ok (text/java

15、script)http httphttp ethernet ii9 src: quantaco26:24:d6 (c8:0a:a9:26:24:d6)9 dst: huaw«lt«_7d:10:c9 (00:«0:fc:7d:10:c9)http/l. 1 200 ok rte«7cssj吐 edit yiew 3 qptixesutistic, thepbor jooh help b c3 x 01廿 2|冋 q q q 區(qū)1隕髯»filter httpeapressioiv. cleat app*/ho.timesource0est)n&#

16、171;tionprotocol imo315 6.344145 fe«o: :«930:m6:47f0:e ffo2:cssdpwotiry httpyi. 1 wiresharic、下r冬7$厶r電電嚴uttf"u77ti7硏訕 222或:西兀58nrrp7scrtpt/lqu&dxt ip/l.xi507 b.699677http frame 434 (1271 bytes on wire, 1271 bytes captured) transwlssion control protocol src port: 6s90 (6590). ost po

17、rt: http (80) seq: 1. ack: 1. len: 1217hypertext transfer protocol«t / http 1.1 r ntruncated accept: 1mage/jpeg< applicatio<i/x>nsapplication,. applicatioo/xajbhxml,電/pjp©g applicatioacceptzh-cnrnuser-agent: ozilla/4.0 (cc«»patible; msie &0; windows mt 6.1; trident/4

18、.0; slcc2: -net clr 2.0.50727: .net clr 3.5. 30 accepten«)dyng: gzip» deflaternwosx:cnblos.co(irnconnect ion: keep-alivern(truncated cookie: _gads-lo326el6d75a03fb51:t-1271677310:s-alni-fbxrrvfg9nksvszz7jahj0f4y-g; _utma-226521935.177圖7、打開博客園抓取的包從圖中可以看出,我們在瀏覽器中愉入並確定時是向服務(wù)器發(fā)送了一個http 請求消息:get

19、 / http/1.1。根據(jù)1.2中介紹的http消息的格式,我們知道get對應(yīng)request、 /對應(yīng)request-line、http/1.1對應(yīng)仮核。除了請求行之外,發(fā)送了一些首部字段,如:accept、 accept-language ' user-agent、accept-encoding、host、connection 等。而且可以看出他們的格式就 是:首部字段名:字段値,注意冒號後面有個空格。接下來我們看一下get / http/1.1請求的響應(yīng)消息是怎樣的: hypertext transfer protocol日 http/1.1 200 okrna expert i

20、nfo (chat/sequence): http/1.1 200 okrnrequest version: http/1.1response code: 200cache-comrol: private, max-age=60rncontent-type: text/html; charset=utf-8rn content-encoding: gziprnexpires: mon, 17 may 2010 14:34:04 gmtrnlast-modified: mon, 17 may 2010 14:33:04 gmtrn vary: accept-encodingrnserver: m

21、icrosoft-lis/7.0rnx-aspnet-version: 2.0.50727rn x-powered-by: asp.netrndate: mon, 17 may 2010 14:33:03 gmtrns content-lengrh: 24081rnrncontent-encoded entity body (gzip): 24081 bytes -> 75902 bytes圖8get / http/1.1請求的響應(yīng)消息響應(yīng)消息的狀態(tài)行是:http/1.1 200 ok,其屮http/1報應(yīng)版本號、2(x)對應(yīng)responsecode > ok 對應(yīng) respons

22、e-phrase ° 除了狀態(tài)行,還返回了一些首部字段 1 如:cache-control、content-type、 content-encoding、expires、last-modified、vary、servei等等。(通過上圖我們可以看出,博客用 的是 11s7.0)上面抓的是get的數(shù)據(jù)包,現(xiàn)在我來看一個post的數(shù)據(jù)包一一打開博客園首頁過程中獲取左 邊的分類信息就是通過post請求返回的°cthtrntt xx. src: quant:24ccb:oa:a9:2«:24:<m). ost: tmmltwa7d:10:c« (00:e0

23、:fc:7d:10:c9)222.92.1177m4 vn 9.0m?4thi 9.q9i972i72aa.e>.m172.ls.43.lt*httf200ok(jrtc 聃"wttf/l.l 200 ok (jfc ”2 http 1.2 2g okjfifmttf/l.x 200 c* <rcc jfxffl5"http. 1.1 200 ok one1 k>5tcctloqlhl7 d,亠1 吟n tr4m«1»1on control erococol. sre fort: (4190). mt w: httpul29 y: 24

24、449. ten; 2 (reasimbltd tcp(um b/tes):wyp<rtext rraraftr protocolt c«p<rt info (chit/seqmvk«): rost 5/rvb)tcu$er5<rv1cc. jar/q<tiag1n2nfo http, 1.1 r n)method: fostrequest uu: /sr>ut»licusarmrvice.asax cwtlaglnxrwoversion: http/1x-r«9ut>t«l-vrlth; mt、rny碎 l

25、4h9um: "5r5nef>rer: http:/cgf<iacctpt: appl 1 cat ton/ )son. tewt/javascript« /xr'-ncenttot-typ: application jion; char set vtbxrsnaccc-sixdln: 9i1p.nuwr-a9<m: mo2l11a/4.0 (ccapat ibl:s.0: trlndowi kt 6.1: trident 4.0: u.cc2: wkt clr 2.0.5077: .nit cm 1.)072*: mt cir e0»c

26、cm;hmx i f cnbl09s. coorn<om«tt*l<n9th; 2r ncorvwcc<on; keep-ahvexrxn圖9、post數(shù)據(jù)包我們可以看到 * post /ws/publicliserservice.asmx/getloginlnfo http/1.1 0 除了把 get 換成了 post 之外,其它信息差不多°下面我們放大看下發(fā)送的首部字段:e tiypertexx transrer protocolpost /ws/publicuserservice. asx/6rtlogininfo http/l.lrn expert

27、 info (chat/sequence): post /ws/publicuserservice.asmx/getlogininfo http/1.lrn request method: post request uri: /ws/publicuserservice.asmx/getlogininfo request version: http/l.1x-requested-with: xmlhttprequestrnaccept-language: zhcnrnref er er: http: /www. cnbl ogs co<n/rnaccept: application/jso

28、n t text/javascript f /圖 10、post /ws/publicusersei*vice.asmx/getlogininfo http/1.1 的首部字段note :本節(jié)涉及的一些首部字段我就不在這裡解釋了。我想,到了這裡大家對http的認識應(yīng) 該更深入了一步。3、post與get的差異1.3中介紹了 8種方法,其中g(shù)et與post最基本和常用了。表單提交中g(shù)et和post方式的區(qū)別 歸納如下幾點: get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傅送數(shù)據(jù)。 get是把參數(shù)數(shù)據(jù)隊列加到提交表單的action屬性所指的url中,値和表單內(nèi)各個 字段一一對應(yīng)、在url中可以看到

29、。post是通過http post機制,將表單內(nèi)各個字段 與其內(nèi)容放債在html header內(nèi)一起傳送到action屬性所指的url地址。用戶看 不到這個過程。 對於get方式,服務(wù)器端用request.querystring獲取變量的値,對於post方式,月艮務(wù) 器端用request.form獲取提交的數(shù)據(jù)。 get傅送的數(shù)據(jù)量較小,不能大於2kb (這主要是因爲(wèi)受url長度限制)。post傅送 的數(shù)據(jù)量較大,一般被默認爲(wèi)不受限制。但理論上,限制取決於服務(wù)器的處理能力。 get安全性較低,post安全性較高。因爲(wèi)get在傳輸過程,數(shù)據(jù)被放在請求的url 中,而如今現(xiàn)有的很多服務(wù)器、代理服務(wù)器或者用戶代理都會

溫馨提示

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

評論

0/150

提交評論