轉(zhuǎn)自http://blog.csdn.net/darxin/article/details/4944225#comments
HTTP請(qǐng)求的GET與POST方式的本質(zhì)區(qū)別可以參考hyddd在《淺談HTTP中Get與Post的區(qū)別》一文中的描述,本文講述了其中比較重要的一條,那就是數(shù)據(jù)傳輸?shù)奈恢貌煌?br>GET方式在request-line中傳送數(shù)據(jù);POST方式在request-line及request-body中均可以傳送數(shù)據(jù)
對(duì)網(wǎng)上傳言的解釋
傳言1:GET方式對(duì)長(zhǎng)度有限制;POST方式對(duì)長(zhǎng)度沒限制。
回答:長(zhǎng)度限制之說一方面是HTTP客戶端(如IE限定URL長(zhǎng)度為2083字節(jié),opera
是4050, Netscape
是8192)的限制;另一方面服務(wù)器的實(shí)現(xiàn)也加入了限制(如果URL長(zhǎng)度過長(zhǎng),HTTP服務(wù)器會(huì)報(bào)414錯(cuò)誤)。但HTTP協(xié)議及URL官方說明均對(duì)長(zhǎng)度限制則沒有規(guī)定。
傳言2:GET是從服務(wù)器上獲取數(shù)據(jù);POST是向服務(wù)器傳送數(shù)據(jù)。
回答:GET方式就沒有向服務(wù)器傳送數(shù)據(jù)?那么URL中的?子句送的是什么?不論是GET還是POST,都可以向服務(wù)器傳送數(shù)據(jù),只不過傳送數(shù)據(jù)的位置不同;不論是GET還是POST,都要從服務(wù)器上獲取數(shù)據(jù),否則IE瀏覽器拿什么東西給我們看呢?關(guān)鍵的問題是
GET的主要任務(wù)是獲得數(shù)據(jù),但在獲得數(shù)據(jù)前也可以向服務(wù)器提交一些數(shù)據(jù);
POST的主要任務(wù)是提交數(shù)據(jù),但在提交數(shù)據(jù)之后服務(wù)器也會(huì)向用戶端返回一些顯示用的數(shù)據(jù)。
傳言3:GET不安全,用戶能從地址欄上看到傳送的數(shù)據(jù);POST安全,用戶不能從地址欄上看到傳送的數(shù)據(jù)。
回答:POST方式看不到傳送的數(shù)據(jù)是因?yàn)镮E瀏覽器做了限制。如果你通過第三方工具看到了POST方式傳送的數(shù)據(jù),你還能說POST方式是安全的嗎?理論上說GET和POST方式都不安全,要不就用不著研究HTTPS了。
HTTP的GET/POST方式有何區(qū)別?這是一個(gè)老生常談的問題,但老生常談的問題往往有一些讓人誤解的結(jié)論。本文將帶您淺嘗HTTP協(xié)議,在了解HTTP協(xié)議的同時(shí)將會(huì)展示許多被人們忽視的內(nèi)容。在掌握了HTTP協(xié)議的過程中我們將自然而然地了解到GET與POST的本質(zhì)區(qū)別。
HTTP請(qǐng)求
從使用者的角度看,一個(gè)HTTP請(qǐng)求起始于
用戶端瀏覽器上輸入的一個(gè)URL地址;
網(wǎng)頁中的一個(gè)超鏈接;
提交一個(gè)HTML表單。
但本質(zhì)上說,一個(gè)HTTP請(qǐng)求起始于用戶端向HTTP服務(wù)器發(fā)送的一個(gè)URL請(qǐng)求。
一個(gè)標(biāo)準(zhǔn)的HTTP請(qǐng)求由以下幾個(gè)部分組成
<request-line>
<headers>
<CRLF>
[<request-body><CRLF>]
在HTTP請(qǐng)求中,第一行是請(qǐng)求行(request-line),用來說明請(qǐng)求類型、要訪問的資源(URL)以及使用的HTTP版本;
緊接著是多行頭部(headers)信息,用來說明服務(wù)器要使用的附加信息;
頭部信息之后是一個(gè)回車換行符(/r/n),用于標(biāo)明頭部信息的結(jié)束。
以上是必須內(nèi)容,根據(jù)需要可在頭部信息結(jié)束之后增加主體數(shù)據(jù)(request-body);
主體數(shù)據(jù)之后是一個(gè)回車換行符(/r/n),用于標(biāo)明主體數(shù)據(jù)的結(jié)束。
需要注意的是
請(qǐng)求行(request-line)中的URL部分必須以application/x-www-form-urlencoded方式編碼。
主體數(shù)據(jù)(request-body)的編碼方式由頭部(headers)信息中的Content-Type指定。
主體數(shù)據(jù)(request-body)的長(zhǎng)度由頭部(headers)信息中的Content-Length指定。
例如,我們可以在IE瀏覽器上輸入下面的網(wǎng)址:
http://localhost:8000/hello/index.html
HTTP請(qǐng)求的頭部信息如下:
GET /hello/index.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
Host: localhost:8000
Connection: Keep-Alive
Cookie: JSESSIONID=BBBA54D519F7A320A54211F0107F5EA6
[End]
上述信息沒有request-body部分,這是以GET方式發(fā)送的HTTP請(qǐng)求。如果請(qǐng)求中需要附加主體數(shù)據(jù),即增加request-body部分,則必須使用POST方式發(fā)送HTTP請(qǐng)求。HTML超鏈接(<a></a>)只能用GET方式提交HTTP請(qǐng)求,HTML表單(<form></form>)則可以使用兩種方式提交HTTP請(qǐng)求。
浙公網(wǎng)安備 33010602011771號(hào)