GET和POST的原理和區(qū)別_第1頁
GET和POST的原理和區(qū)別_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、 5/5GET和POST的原理和區(qū)別 GET和POST的原理和區(qū)別 總結(jié):1、請求行(request-line)中的URL部分必須以application/x-form-urlencoded方式編碼。 2、主體數(shù)據(jù)(request-body)的編碼方式由頭部(headers)信息中的Content-Type指定。 3、主體數(shù)據(jù)(request-body)的長度由頭部(headers)信息中的Content-Length指定。 4、以GET方式提交表單時(shí),每個(gè)表單域的NAME與VALUE 要以URL的方式提交,所以每個(gè)表單域的NAME與VALUE 均要進(jìn)行URL Encoding處理。這個(gè)操作通

2、常是由用戶端瀏覽器完成的。 5、以POST方式提交表單時(shí),action標(biāo)簽屬性的值必須是已經(jīng)進(jìn)行了URL Encoding處理之后的值,用戶端瀏覽器不會(huì)自動(dòng)處理URL中的非法字符。 6、GET方式在request-line中傳送數(shù)據(jù);POST方式在request-line及request-body中均可以傳送數(shù)據(jù)。 講解: HTTP請求 從使用者的角度看,一個(gè)HTTP請求起始于 用戶端瀏覽器上輸入的一個(gè)URL地址; 網(wǎng)頁中的一個(gè)超鏈接; 提交一個(gè)HTML表單。 但本質(zhì)上說,一個(gè)HTTP請求起始于用戶端向HTTP服務(wù)器發(fā)送的一個(gè)URL請求。 一個(gè)標(biāo)準(zhǔn)的HTTP請求由以下幾個(gè)部分組成 reques

3、t-line headers CRLF request-bodyCRLF 在HTTP請求中,第一行是請求行(request-line),用來說明請求類型、要訪問的資源(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é)束。 需要注意的是 請求行(request-line)中的URL部分必須以 application/x-fo

4、rm-urlencoded方式編碼。 主體數(shù)據(jù)(request-body)的編碼方式由頭部(headers)信息中的Content-Type指定。 主體數(shù)據(jù)(request-body)的長度由頭部(headers)信息中的Content-Length指定。 例如,我們可以在IE瀏覽器上輸入下面的網(wǎng)址: http:/localhost:8000/hello/index.html HTTP請求的頭部信息如下: GET /hello/index.html HTTP/1.1 Accept: * Accept-Language: zh-cn Accept-Encoding: gzip, deflate

5、Host: localhost:8000 Connection: Keep-Alive Cookie: JSESSIONID=BBBA54D519F7A320A54211F0107F5EA6 End 需要注意的是,以GET方式提交表單時(shí),每個(gè)表單域的NAME與VALUE要以URL的方式提交,所以每個(gè)表單域的NAME與VALUE均要進(jìn)行URL Encoding處理。這個(gè)操作 通常是由用戶端瀏覽器完成的。如下面的表單: xhtml:nogutter view plaincopy 1. /spanform action=checkUser.html method=GET 2. /spaninput

6、type=hidden name=opt value=中文/ 3. /spaninput type=text name=username value=yyy/ 4. /spaninput type=text name=age value=zzz/ 5. /spaninput type=submit value=submit/ 6. /spanform 其中表單域opt的VALUE是中文字符“中文”,在表單提交時(shí),用戶端瀏覽器會(huì)自動(dòng)將其進(jìn)行URL Encoding。HTTP頭部信息如下: GET /hello/checkUser.html?opt=中文 username=yyyage=zzz H

7、TTP/1.1 Referer: http:/localhost:8000/hello/index.html Accept: * Accept-Language: zh-cn Content-Type: application/x-form-urlencoded Accept-Encoding: gzip, deflate Host: localhost:8000 Content-Length: 20 Connection: Keep-Alive Cache-Control: no-cache Cookie: JSESSIONID=BBBA54D519F7A320A54211F0107F5EA

8、6 username=yyyage=zzz End 需要注意的是,以POST方式提交表單時(shí),action標(biāo)簽屬性的值必須是已經(jīng)進(jìn)行了URL Encoding處理之后的值,用戶端瀏覽器不會(huì)自動(dòng)處理URL中的非法字符。如下面的表單是不符合要求的: 1. 2. /spanform action=checkUser.html?opt=中文 method=POST 3. /spaninput type=text name=username value=yyy/ 4. /spaninput type=text name=age value=zzz/ 5. /spaninput type=submit va

9、lue=submit/ 6. /spanform 正確的表單應(yīng)該是: 1. /spanform action=checkUser.html?opt=中文 method=POST 2. /spaninput type=text name=username value=yyy/ 3. /spaninput type=text name=age value=zzz/ 4. /spaninput type=submit value=submit/ 5. /spanform 數(shù)據(jù)主體的編碼方式 在HTTP請求中,request-line總是以 application/x-form-urlencoded方

10、式編碼。enctype標(biāo)簽屬性只對request-body起作用。也就是說只有在method=POST的情況下,設(shè)置enctype才起作用。 設(shè)置enctype標(biāo)簽屬性后,在HTTP請求的頭部(headers)信息中會(huì)多出一行Content-Type信息,并且request-body 部分將會(huì)以Content-Type指定的MIME進(jìn)行編碼。這些操作都是由客戶端瀏覽器自動(dòng)完成的。 在沒有指定enctype標(biāo)簽屬性時(shí),表單以默認(rèn)的application/x-form-urlencoded方式對request-body進(jìn)行編碼。 如果表單域中的NAME或VALUE含有非法字符(如中文字符),客戶端

11、瀏覽器會(huì)自動(dòng)對其進(jìn)行URL Encoding處理。如下面的表單: xhtml:nogutter view plaincopy 1. /spanform action=checkUser.html method=POST 2. /spaninput type=hidden name=opt value=中文/ 3. /spaninput type=text name=username value=yyy/ 4. /spaninput type=text name=age value=zzz/ 5. /spaninupt type=submit value=submit/ 6. /spanform

12、 表單提交時(shí),HTTP頭部信息如下: POST /hello/checkUser.html HTTP/1.1 Accept: * Referer: http:/localhost:8000/hello/index.html Accept-Language: zh-cn Content-Type: multipart/form-data; boundary=7d931c5d043e Accept-Encoding: gzip, deflate Host: localhost:8000 Content-Length: 382 Connection: Keep-Alive Cache-Control

13、: no-cache Cookie: JSESSIONID=6FE3D8E365DF9FE26221A32624470D24 7d931c5d043e Content-Disposition: form-data; name=username yyy 7d931c5d043e Content-Disposition: form-data; name=age zzz 7d931c5d043e Content-Disposition: form-data; name=file; filename=C:/1.txt Content-Type: text/plain hello 7d931c5d043

14、e- End GET與POST的區(qū)別 HTTP請求的GET與POST方式的本質(zhì)區(qū)別可以參考hyddd 在淺談HTTP中Get與Post的區(qū)別一文中的描述,本 文講述了其中比較重要的一條,那就是數(shù)據(jù)傳輸?shù)奈恢貌煌ET方式在request-line中傳送數(shù)據(jù);POST方式在request-line及request-body中均可以傳送數(shù)據(jù)。 對網(wǎng)上傳言的解釋 傳言1:GET方式對長度有限制;POST方式對長度沒限制。回答:長度限制之說一方面是HTTP客戶端(如IE限定URL 長度為2083字節(jié),opera 是4050,Netscape 是8192)的限制;另一方面服務(wù)器的實(shí)現(xiàn)也加入了限制(如果URL 長度過長,HTTP服務(wù)器會(huì)報(bào)414錯(cuò)誤)。但HTTP協(xié)議及URL官方說明均對長度限制則沒有規(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的主要

溫馨提示

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

最新文檔

評論

0/150

提交評論