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ù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、http協(xié)議及其post與get操作差異引言http協(xié)議我想任何it人士都耳熟能詳了,大家都能說出個(gè)所以然 來。但是如果我問你http 協(xié)議的請(qǐng)求方法有哪些? 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請(qǐng)求的方法o 1.4、http響應(yīng)的代碼2、抓包分析 3、post與get的差異1、http槪述爲(wèi)了喚醒你對(duì)http協(xié)議的記憶或

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

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

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

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

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

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

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

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

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

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

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

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

14、取打開博客園首頁時(shí),我的電腦與 博客園服務(wù)器的交互過程的http數(shù)據(jù)包。做好準(zhǔn)備工作,關(guān)閉一些可能干擾我們抓取打開博客 園的相關(guān)程序°如下圖'我們?cè)跒g覽器中輸人並確定時(shí)»首先抓到如下包: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電電嚴(yán)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、打開博客園抓取的包從圖中可以看出,我們?cè)跒g覽器中愉入並確定時(shí)是向服務(wù)器發(fā)送了一個(gè)http 請(qǐng)求消息:get

19、 / http/1.1。根據(jù)1.2中介紹的http消息的格式,我們知道get對(duì)應(yīng)request、 /對(duì)應(yīng)request-line、http/1.1對(duì)應(yīng)仮核。除了請(qǐng)求行之外,發(fā)送了一些首部字段,如:accept、 accept-language ' user-agent、accept-encoding、host、connection 等。而且可以看出他們的格式就 是:首部字段名:字段値,注意冒號(hào)後面有個(gè)空格。接下來我們看一下get / http/1.1請(qǐng)求的響應(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請(qǐng)求的響應(yīng)消息響應(yīng)消息的狀態(tài)行是:http/1.1 200 ok,其屮http/1報(bào)應(yīng)版本號(hào)、2(x)對(duì)應(yīng)responsecode > ok 對(duì)應(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)在我來看一個(gè)post的數(shù)據(jù)包一一打開博客園首頁過程中獲取左 邊的分類信息就是通過post請(qǐng)求返回的°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é)涉及的一些首部字段我就不在這裡解釋了。我想,到了這裡大家對(duì)http的認(rèn)識(shí)應(yīng) 該更深入了一步。3、post與get的差異1.3中介紹了 8種方法,其中g(shù)et與post最基本和常用了。表單提交中g(shù)et和post方式的區(qū)別 歸納如下幾點(diǎn): get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傅送數(shù)據(jù)。 get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的action屬性所指的url中,値和表單內(nèi)各個(gè) 字段一一對(duì)應(yīng)、在url中可以看到

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論