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.
multipart/form-data
的優勢還伴隨一些兼容性問題,詳細請參考文章結束的參考文獻。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
當我們使用ajax去異步請求數據時,會發現通過$.POST處理時數據出現在請求體的form-data,而用$.AJAX去異步請求數據時,數據出現在請求體的request payload。
GET、POST方式提交的請求:
Content-type:
1、application/x-www-form-urlencoded:@RequestBody不是必須加的
2、mutipart/form-data:@RequestBody不能處理這種格式
3、其他格式,比如application/json,application/xml等,必須使用@RequestBody來處理
PUT方式提交的請求:
以上1和3的場景都是必須使用@RequestBody來處理的,2場景也是不支持的