《四種常見的 POST 提交數(shù)據(jù)方式》閱讀筆記

目標文章鏈接:https://imququ.com/post/four-ways-to-post-data-in-http.html

以ASCII碼來傳輸

HTTP協(xié)議是以ASCII碼來傳輸阅仔,是把TCP/IP協(xié)議再包裝了一層爬迟。

以ASCII碼來傳輸台腥,這就說明漢字啊或者一些符號啊需要轉化才行。

HTTP請求分為三個部分掀序,“狀態(tài)行、請求頭、消息主體”萄焦。

狀態(tài)行很容易聯(lián)想到狀態(tài)碼,100至500冤竹。1XX表示正在跑拂封,2XX表示成功了,3XX表示重定向鹦蠕,4XX表示客戶端有問題(常見的有這個地址無效)冒签,5XX表示服務器內部有問題。
請求頭就是 Request Header钟病,F(xiàn)12上的Headers的Request Headers萧恕。
消息主體 就是 body,需要傳輸?shù)臄?shù)據(jù)肠阱。

協(xié)議規(guī)定POST提交的數(shù)據(jù)必須放在消息主體(entity-body)中票唆,但協(xié)議沒有規(guī)定數(shù)據(jù)使用什么方式的編碼。開發(fā)者屹徘,可以自己決定消息主體的格式走趋,最要最后發(fā)送的HTTP請求滿足上面的格式就可以。但是服務器發(fā)送后噪伊,要服務端解析成功才有意義簿煌。服務端通常是根據(jù)請求頭(headers)中的Content-Type字段來獲知請求中的消息主體是何種方式編碼的,再對主體進行解析鉴吹。所以說POST提交數(shù)據(jù)方案姨伟,包含了Content-Type和消息主體編碼方式兩部分。

這段話有兩個啟發(fā)豆励,第一編碼的格式可以自己規(guī)定夺荒。就是說我自己寫服務端和客戶端的話,我完全可以自己定義格式肆糕。不過難度很大般堆。目前務實的是,我先把目前約定俗稱的四種格式掌握好诚啃。

application/x-www-form-urlencoded

這是最常見的POST提交數(shù)據(jù)的方式了淮摔。瀏覽器原生的<form>表單,如果不設置enctype屬性始赎,那么最終就會以application/x-www-form-urlencoded方式提交數(shù)據(jù)和橙。

原來我把application/x-www-form-urlencoded和multipart/form-data這兩種數(shù)據(jù)格式弄混了仔燕。在我自己寫頁面的時候,發(fā)現(xiàn)不定義enctype也可以提交魔招,但是服務器端我是用python 的resp.form來解析的晰搀,那時候我就發(fā)現(xiàn)解析不出來。

請求類似如下方式

POST http://www.example.com HTTP/1.1
Content - Type: application/x-www-form-urlencoded;charset=utf-8

sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

首先办斑,Content-Type被指定為 application/x-www-form-urlencoded;
其次外恕,提交的數(shù)據(jù)按照key1=val1&key2=val2的方式進行編碼,key和val都進行了URL轉碼乡翅。
再次鳞疲,我們使用Ajax提交數(shù)據(jù)時,也是使用這種方式蠕蚜。

key1=val1&key2=val2這種編碼方式看著很眼熟尚洽,get方式提交數(shù)據(jù)的時候不也是這個樣子嗎?由此靶累,我覺得form-urlencoded作為post默認方式腺毫,不是偶然的,是和get一脈相承的挣柬。

multipart/form-data

這種方式用于上傳表單潮酒。作者的話太簡單,我來引述點其他資料凛忿。

http://blog.csdn.net/five3/article/details/7181521

http協(xié)議本身的原始方式不支持multipart/form-data澈灼,這個請求方式是在原始post方法上演變而來的。

  1. multipart/form-data 的基礎方法是post店溢,也就是說由post方法來組合實現(xiàn)的。
  2. multipart/form-data與post方法的不同之處:
    1 multipart/form-data的基礎方法是post委乌,也就是說由post方法來組合實現(xiàn)的床牧。
    2 multipart/form-data與post方法不同之處在于:請求頭,請求體遭贸。
    3 multipart/form-data的請求頭必須包含一個特殊的頭信息:Content-Type,且值也必須規(guī)定為multipart/form-data戈咳,同時還需要規(guī)定一個內容分割符用于分割請求體的多個post的內容,如文件內容和文本內容自然要分割開來壕吹。具體的頭部信息如下:
    Content-Type:multipart/form-data;boundary=${bound}
    //${bound}是一個占位符著蛙,代表我們規(guī)定的分割符,分割符我們可以自己隨意規(guī)定耳贬。如“---------------------1231242235346367”
    4 multipart/form-data的請求體也是一個字符串踏堡,不過和post的請求體不同的是它的構造方式,post是簡單的key=value咒劲,而multipart/form-data則是添加了分割符等內容的構造體顷蟆。格式如下:
--${bound}
Content-Disposition:form-data,name="filename"

HTTP.pdf
--${bound}
Content-Disposition:form-data;name="file000";filename="HTTP協(xié)議詳解.pdf"
Content-Type:application/octet-stream

.....

這兩種方式都是瀏覽器原生支持的诫隅,現(xiàn)階段form表單也只支持這兩種方式。

application/json

POST http://www.example.com HTTP/1.1 
Content-Type: application/json;charset=utf-8

{"title":"test","sub":[1,2,3]}

這種請求方式非常常見

text/xml

我覺得過時了帐偎,沒必要關注了逐纬。

總結

post請求數(shù)據(jù)的時候有兩種,傳json的話就是application/json,不傳json的話就是application/x-www-form-urlencoded

傳文件的話用multipart/form-data.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末削樊,一起剝皮案震驚了整個濱河市豁生,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漫贞,老刑警劉巖甸箱,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绕辖,居然都是意外死亡摇肌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門仪际,熙熙樓的掌柜王于貴愁眉苦臉地迎上來围小,“玉大人,你說我怎么就攤上這事树碱】鲜剩” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵成榜,是天一觀的道長框舔。 經(jīng)常有香客問我,道長赎婚,這世上最難降的妖魔是什么刘绣? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮挣输,結果婚禮上纬凤,老公的妹妹穿的比我還像新娘。我一直安慰自己撩嚼,他們只是感情好停士,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著完丽,像睡著了一般恋技。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逻族,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天蜻底,我揣著相機與錄音,去河邊找鬼瓷耙。 笑死朱躺,一個胖子當著我的面吹牛刁赖,可吹牛的內容都是我干的。 我是一名探鬼主播长搀,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宇弛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了源请?” 一聲冷哼從身側響起枪芒,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谁尸,沒想到半個月后舅踪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡良蛮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年抽碌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片决瞳。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡货徙,死狀恐怖,靈堂內的尸體忽然破棺而出皮胡,到底是詐尸還是另有隱情痴颊,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布屡贺,位于F島的核電站蠢棱,受9級特大地震影響,放射性物質發(fā)生泄漏甩栈。R本人自食惡果不足惜泻仙,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望量没。 院中可真熱鬧饰豺,春花似錦、人聲如沸允蜈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饶套。三九已至,卻和暖如春垒探,著一層夾襖步出監(jiān)牢的瞬間妓蛮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工圾叼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛤克,地道東北人捺癞。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像构挤,于是被迫代替她去往敵國和親髓介。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容