HTTP協議約定POST 提交的數據必須放在消息主體(entity-body)中,但協議並沒有規定數據必須使用什麼編碼方式(不是指字符編碼),由開發者自行決定。服務端通常是根據請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進行解析。因此POST 提交數據方案,包含了 Content-Type 和消息主體編碼方式兩部分
。主要有四種方式:application/x-www-form-urlencoded、multipart/form-data、raw。
(1)application/x-www-form-urlencoded
最常見的 POST 提交數據的方式了。瀏覽器的原生 <form> 表單,如果不設置 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交數據。
此方式的編碼方式:首先,Content-Type 被指定爲 application/x-www-form-urlencoded;其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。
(2)multipart/form-data
使用表單上傳文件時,必須讓 <form> 表單的 enctype 等於 multipart/form-data。 Content-Type 裏指明瞭數據是以 multipart/form-data 來編碼,上面提到的這兩種 POST 數據的方式,都是瀏覽器原生支持的,而且現階段標準中原生 <form> 表單也只支持這兩種方式(通過 <form> 元素的 enctype
屬性指定,默認爲 application/x-www-form-urlencoded
。其實 enctype
還支持 text/plain
,不過用得非常少)。
(3)raw方式
raw的編碼方式主要application/json、text/xml等
image.png
- application/json
使用application/json 這個 Content-Type 作爲響應頭,用來告訴服務端消息主體是序列化後的 JSON 字符串。這種方案,可以方便的提交複雜的結構化數據,特別適合 RESTful 的接口。 -
text/xml
使用 text/xml 這個 Content-Type 作爲響應頭。image.png
image.png
作者:嘻洋洋
鏈接:https://www.jianshu.com/p/79c6a2b7a7b3
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。