成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

POST 請求的三種常見數(shù)據(jù)提交格式

Kylin_Mountain / 3591人閱讀

摘要:一般使用請求方法向服務(wù)器發(fā)送數(shù)據(jù)主要是一些創(chuàng)建更新操作,本文討論的是請求方法常用的四種數(shù)據(jù)提交格式。其實就是和請求的數(shù)據(jù)提交格式是一樣的,只不過位置從上換到了里。適用場景數(shù)據(jù)量不大數(shù)據(jù)層級不深的情況下強(qiáng)烈建議這種數(shù)據(jù)提交格式。

本文所講的 POST 請求是 HTTP/1.1 協(xié)議中規(guī)定的眾多 HTTP 請求方法的其中最常用的一個。一般使用 POST 請求方法向服務(wù)器發(fā)送數(shù)據(jù)(主要是一些創(chuàng)建更新操作),本文討論的是 POST 請求方法常用的四種數(shù)據(jù)提交格式。

由于 HTTP/1.1 協(xié)議中并沒有對請求使用什么編碼方式進(jìn)行規(guī)定,所以理論上開發(fā)者完全可以自己決定請求的 Body 體使用什么格式,當(dāng)然實際上大家都還是用通用的那么幾種編碼方式來提交數(shù)據(jù)(生態(tài)很關(guān)鍵)。

注:以下排名不分先后。。。

application/x-www-form-urlencoded

對于瀏覽器原生的 form 表單,enctype 的值不指定的話,默認(rèn)就是這個家伙。實際上大部分情況都使用它即可,編碼方式足夠簡單高效,各方面支持也都很完備,如各大瀏覽器調(diào)試工具、各大抓包軟件等。

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

key1=val1&key2=val2

基本的請求類似上面這樣,數(shù)據(jù)的編碼方式采用 key1=val1&key2=val2 的形式,對其中的鍵值對都需要使用 URL Encode 編碼一下。其實就是和 GET 請求的數(shù)據(jù)提交格式是一樣的,只不過位置從 Request URL 上換到了 Request Body 里。

這種格式結(jié)構(gòu)簡單,但對于數(shù)據(jù)層級較深的情況,比如一些有復(fù)雜層級關(guān)系的接口數(shù)據(jù),這種方式就顯得有點力不從心了。另一方面,對于需要上傳二進(jìn)制數(shù)據(jù)(比如圖像、音頻等文件),這種方式就不那么高效了,而且對于非 ASCII 碼的數(shù)據(jù)就丟失了,所以傳文件的情況就不能使用這種方式。

適用場景:數(shù)據(jù)量不大、數(shù)據(jù)層級不深的情況下強(qiáng)烈建議這種數(shù)據(jù)提交格式。

multipart/form-data

當(dāng)你需要提交文件、非 ASCII 碼的數(shù)據(jù)或者是二進(jìn)制流數(shù)據(jù),則使用這種提交方式。類似下面這個請求示例:

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryPAlLG7hJKNYc4ft3

------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"

demo
------WebKitFormBoundaryPAlLG7hJKNYc4ft3
Content-Disposition: form-data; name="file"; filename="demo.png"
Content-Type: image/png


------WebKitFormBoundaryPAlLG7hJKNYc4ft3--

第二行指定編碼方式 Content-Type 為 multipart/form-data,緊接著生成一個分界線 boundary 即 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,又臭又長的目的是為了避免和 Body 正文內(nèi)容有沖突,它的作用是用來分隔不同的字段。

Body 體分為多個結(jié)構(gòu)類似的部分,每一部分以 --boundary 開頭,因為本次請求生成的 boundary 為 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,所以最終是 ------WebKitFormBoundaryPAlLG7hJKNYc4ft3。接著是描述內(nèi)容的元信息,包括字段名稱,如果是文件則還有文件名稱和文件類型。接著留一空行,然后才是字段值。什么時候結(jié)束呢,以 --boundary-- 標(biāo)志結(jié)束。

這種方式本就是專為上傳文件的場景設(shè)計的,雖然你也可以使用這種方式傳遞普通數(shù)據(jù),但無疑會增加不少數(shù)據(jù)包的大?。ㄟ@么多 boundary 還是有不少空間占用的)。

適用場景:文件上傳。

application/json

很明顯在 JSON 格式火之前,肯定沒有它的,前面說到使用什么提交數(shù)據(jù)方式是沒有硬性規(guī)定的,所以在 JSON 格式火了以后,尤其以其優(yōu)秀的數(shù)據(jù)結(jié)構(gòu)表達(dá)能力,逐漸流行開來,現(xiàn)在我們對它完全不會陌生。

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

{"name":"xfly","age": 24, "hobby":["x","xx","xxx"]}

適用場景:數(shù)據(jù)結(jié)構(gòu)較復(fù)雜,層級較深的情況。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104808.html

相關(guān)文章

  • axios POST提交數(shù)據(jù)三種請求方式寫法

    摘要:總結(jié)從轉(zhuǎn)到最難忘的就是要設(shè)置,還好現(xiàn)在都搞懂了他們的原理上面三種方式會對應(yīng)后臺的請求方式,這個也要注意,比如的,等等 1、Content-Type: application/json import axios from axios let data = {code:1234,name:yyyy}; axios.post(`${this.$url}/test/testRequest`,d...

    Shisui 評論0 收藏0
  • 【web開發(fā)】php服務(wù)端提交post請求

    摘要:參見請求分析推測可能是對方服務(wù)器不接受這樣的吧或者對的不兼容 服務(wù)端常見的post提交有三種方式,這里主要記錄curl方式 1、服務(wù)端進(jìn)行http-post的三種方法 1.1 通過curl函數(shù) function post($url, $post_data = , $timeout = 5){//curl $ch = curl_init(); curl_setopt (...

    AndroidTraveler 評論0 收藏0
  • JS基礎(chǔ)篇--JS之表單提交時編碼類型enctype詳解

    摘要:格式支持比鍵值對復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點也很有用。例如下面這段代碼最終發(fā)送的請求是這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合的接口。 簡介 form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認(rèn)為application/x-www-form-urlencoded。 ...

    ad6623 評論0 收藏0
  • 簡談文件下載三種方式

    摘要:一前言本文章將以報表下載為例,給大家介紹三種文件下載的方式。通過二進(jìn)制數(shù)據(jù)流的方式下載這種方式是我目前采用的方式,用于處理報表下載。缺點對于數(shù)據(jù)量不大的文件,這種方式是可行的。 一、前言 本文章將以excel報表下載為例,給大家介紹三種文件下載的方式。 原文地址:簡談文件下載的三種方式 | Rychou 二、正文 1. 通過服務(wù)器文件地址下載 這是最常見的文件下載方式,大多數(shù)網(wǎng)站的音頻...

    lsxiao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<