1. 程式人生 > >Parameters、Form Data、Request Payload

Parameters、Form Data、Request Payload

在與server端進行資料傳遞時,通常會用到GET、POST方法進行引數提交,而引數提交的方式,通常取決於server端對資料的接收方式。

Query String Parameters
當發起一次GET請求時,引數會以url string的形式進行傳遞。即?後的字串則為其請求引數,並以&作為分隔符。

如下http請求報文頭:

// General
Request URL: http://foo.com?x=1&y=2
Request Method: GET

// Query String Parameters
x=1&y=2

Form Data
當發起一次POST請求時,若未指定content-type,則預設content-type為application/x-www-form-urlencoded。即引數會以Form Data的形式進行傳遞,不會顯式出現在請求url中。

如下http請求報頭:

// General
Request URL: http://foo.com
Request Method: POST

// Request Headers
content-type: application/x-www-form-urlencoded; charset=UTF-8

// Form Data
x=1&y=2

Request Payload
當發起一次POST請求時,若content-type為application/json,則引數會以Request Payload的形式進行傳遞(顯然的,資料格式為JSON),不會顯式出現在請求url中。

如下http請求報頭:

// General
Request URL: http://foo.com
Request Method: POST

// Request Headers
content-type: application/json; charset=UTF-8

// Request Payload
x=1&y=2

如果希望通過Form Data的方式來傳遞資料,則可以通過原生方法formData()來進行資料組裝,且content-type需要設定為multipart/form-data。
如下http請求報頭:

// General
Request URL: http://foo.com
Request Method: POST

// Request Headers
content-type: multipart/form-data; charset=UTF-8

// Request Payload
------WebKitFormBoundaryAIpmgzV8Ohi99ImM
Content-Disposition: form-data; name="x"

1
------WebKitFormBoundaryAIpmgzV8Ohi99ImM
Content-Disposition: form-data; name="y"

2
------WebKitFormBoundaryAIpmgzV8Ohi99ImM--

其中,WebKitFormBoundaryAIpmgzV8Ohi99ImM為瀏覽器隨機生成的boundary,作為分隔引數,作用等同於&。

application/x-www-form-urlencoded 和 multipart/form-data`

The content type "application/x-www-form-urlencoded" is inefficient for sending large quantities of binary data or text containing non-ASCII characters. The content type "multipart/form-data" should be used for submitting forms that contain files, non-ASCII data, and binary data.