POST和GET的前世今生

GET和POST是HTTP(超文本傳輸協(xié)議)最常用的兩種方法

HTTP的設(shè)計(jì)目的為了保證客戶機(jī)與服務(wù)器之間的通信
HTTP的工作方式是客戶機(jī)和服務(wù)器之間的請(qǐng)求-應(yīng)答協(xié)議

  • GET-從指定資源請(qǐng)求數(shù)據(jù)
  • POST-從指定的資源提交要被處理的數(shù)據(jù)

GET方法
查詢字符串(名稱/值對(duì))是在GET請(qǐng)求的URL中發(fā)送的:/test/demo_form.asp?name1=value1&name2=value2
有關(guān)GET請(qǐng)求的其他一些注釋

  • GET請(qǐng)求可被緩存
  • GET請(qǐng)求保留在瀏覽器歷史紀(jì)錄中
  • GET請(qǐng)求可被收藏為書(shū)簽
  • GET請(qǐng)求不應(yīng)在處理敏感數(shù)據(jù)時(shí)使用
  • GET請(qǐng)求有長(zhǎng)度限制
  • GET請(qǐng)求只應(yīng)用于取回?cái)?shù)據(jù)

POST方法
查詢字符串(名稱/值)是在POST請(qǐng)求的HTTP消息主體中發(fā)送的POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
有關(guān)POST請(qǐng)求的其他一些注釋

  • POST請(qǐng)求不會(huì)被緩存
  • POST請(qǐng)求不會(huì)保留在瀏覽器歷史紀(jì)錄中
  • POST請(qǐng)求不能被收藏為書(shū)簽

GET和POST對(duì)比

image.png

其他HTTP請(qǐng)求方法
image.png

GET、POST 請(qǐng)求報(bào)文上的區(qū)別
GET 和 POST 只是 HTTP 協(xié)議中兩種請(qǐng)求方式(異曲同工)雕拼,而 HTTP 協(xié)議是基于 TCP/IP 的應(yīng)用層協(xié)議箫踩,無(wú)論 GET 還是 POST,用的都是同一個(gè)傳輸層協(xié)議,所以在傳輸上,沒(méi)有區(qū)別。

報(bào)文格式上惹资,不帶參數(shù)時(shí),最大區(qū)別就是第一行方法名不同, 僅僅是報(bào)文的幾個(gè)字符不同而已航闺,POST 方法請(qǐng)求報(bào)文第一行是這樣的 POST /url HTTP/1.1 GET 方法請(qǐng)求報(bào)文第一行是這樣的 GET /url HTTP/1.1
GET方法報(bào)文
GET /updateInfo?name=Javanx&age=25 HTTP/1.1 Host: localhost
POST方法報(bào)文
POST /updateInfo HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded name=Javanx&age=25

現(xiàn)在我們知道了兩種方法本質(zhì)上是 TCP 連接褪测,沒(méi)有區(qū)別。但如果不按規(guī)范來(lái)也是可以的,可以在 URL 上寫(xiě)參數(shù)汰扭,然后方法使用 POST;也可以在 Body 寫(xiě)參數(shù)福铅,然后方法使用 GET萝毛。當(dāng)然,這需要服務(wù)端支持
GET方法參數(shù)的寫(xiě)法
在約定中滑黔,我們的參數(shù)是寫(xiě)在笆包?后面,用&分割略荡。解析報(bào)文的過(guò)程是通過(guò)獲取TCP數(shù)據(jù)庵佣,用正則等工具從數(shù)據(jù)中獲取Header和Body,從而提取參數(shù)汛兜。
GET方法的長(zhǎng)度限制
首先聲明巴粪,HTTP協(xié)議沒(méi)有Body和URL的長(zhǎng)度限制,對(duì)URL限制大多是瀏覽器和服務(wù)器的原因粥谬,服務(wù)器因?yàn)橐幚黹L(zhǎng)URL要消耗較多的資源肛根,為了性能和安全(防止惡意構(gòu)造長(zhǎng)URL來(lái)攻擊)考慮,會(huì)給URL長(zhǎng)度加限制漏策。
規(guī)定:get傳送的數(shù)據(jù)量較小派哲,不能大于2KB。post傳送的數(shù)據(jù)量較大掺喻,一般被默認(rèn)為不受限制芭届。但理論上,IIS4中最大量為80KB感耙,IIS5中為100KB褂乍。
GET和POST安全性
有人說(shuō)POST比GET安全,因?yàn)閿?shù)據(jù)在地址欄上不可見(jiàn)即硼。
但是從傳輸?shù)慕嵌戎v树叽,他們都是不安全的,因?yàn)镠TTP在網(wǎng)絡(luò)上是明文傳輸?shù)那酰灰诰W(wǎng)絡(luò)節(jié)點(diǎn)上抓包题诵,就能完整地獲取數(shù)據(jù)報(bào)文。
要想安全傳輸层皱,就只有加密性锭,也就是HTTPS
POST方法會(huì)產(chǎn)生兩個(gè)TCP數(shù)據(jù)包嗎?
有些文章中提到叫胖,post 會(huì)將 header 和 body 分開(kāi)發(fā)送草冈,先發(fā)送 header,服務(wù)端返回 100 狀態(tài)碼再發(fā)送 body。

HTTP 協(xié)議中沒(méi)有明確說(shuō)明 POST 會(huì)產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包怎棱,而且實(shí)際測(cè)試(Chrome)發(fā)現(xiàn)哩俭,header 和 body 不會(huì)分開(kāi)發(fā)送。

所以拳恋,header 和 body 分開(kāi)發(fā)送是部分瀏覽器或框架的請(qǐng)求方法凡资,不屬于 post 必然行為。
客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下格式

image.png

HTTP請(qǐng)求中請(qǐng)求頭 Header里的 Content-Type

Content-Type一般有這三種谬运。
application/x-www-form-urlencoded :數(shù)據(jù)被編碼為名稱/值對(duì)隙赁。這是標(biāo)準(zhǔn)的編碼格式。
multipart/form-data : 數(shù)據(jù)被編碼為一條消息梆暖,頁(yè)上的每個(gè)控件對(duì)應(yīng)消息中的一個(gè)部分伞访。
text/plain :數(shù)據(jù)以純文本形式(text/json/xml/html)進(jìn)行編碼,其中不含任何控件或格式字符轰驳。postman軟件里標(biāo)的是RAW厚掷。

form表單的enctype屬性為編碼方式,常見(jiàn)的有兩種:application/x-www-form-urlencoded级解、multipart/form-data蝗肪。默認(rèn)值是application/x-www-form-urlencoded。
當(dāng)請(qǐng)求方式為get時(shí)瀏覽器會(huì)用application/x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個(gè)字符串蠕趁,用 薛闪? 連接url將數(shù)據(jù)追加到url的后邊。生成新的url俺陋。

當(dāng)請(qǐng)求方式為post瀏覽器會(huì)將form數(shù)據(jù)分裝到http body中豁延,如果沒(méi)有type=file的控件的話,瀏覽器會(huì)使用默認(rèn)的編碼方式application/x-www-form-urlencoded進(jìn)行編碼腊状,如果有type=file控件的話诱咏,將會(huì)使用multipart/form-data的編碼方式進(jìn)行編碼。

當(dāng)action為post且Content-Type類型是multipart/form-data缴挖,瀏覽器會(huì)把整個(gè)表單以控件為單位分割袋狞,并為每個(gè)部分加上Content-Disposition(form-data或者file),Content-Type(默認(rèn)為text/plain),name(控件name)等信息,并加上分割符(boundary)映屋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苟鸯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棚点,更是在濱河造成了極大的恐慌早处,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘫析,死亡現(xiàn)場(chǎng)離奇詭異砌梆,居然都是意外死亡默责,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)咸包,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桃序,“玉大人,你說(shuō)我怎么就攤上這事烂瘫∶叫埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵忱反,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我滤愕,道長(zhǎng)温算,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任间影,我火速辦了婚禮注竿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魂贬。我一直安慰自己巩割,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布付燥。 她就那樣靜靜地躺著宣谈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪键科。 梳的紋絲不亂的頭發(fā)上闻丑,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音勋颖,去河邊找鬼嗦嗡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饭玲,可吹牛的內(nèi)容都是我干的侥祭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼茄厘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矮冬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起次哈,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欢伏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后亿乳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體硝拧,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡径筏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了障陶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滋恬。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抱究,靈堂內(nèi)的尸體忽然破棺而出恢氯,到底是詐尸還是另有隱情,我是刑警寧澤鼓寺,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布勋拟,位于F島的核電站,受9級(jí)特大地震影響妈候,放射性物質(zhì)發(fā)生泄漏敢靡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一苦银、第九天 我趴在偏房一處隱蔽的房頂上張望啸胧。 院中可真熱鬧,春花似錦幔虏、人聲如沸纺念。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)陷谱。三九已至,卻和暖如春瑟蜈,著一層夾襖步出監(jiān)牢的瞬間叭首,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工踪栋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焙格,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓夷都,卻偏偏與公主長(zhǎng)得像眷唉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容