http 请求参数之Query String Parameters、Form Data、Request Payload
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场景也是不支持的
最新文章
- 【Win10应用开发】自适应磁贴中的分组
- yum
- 《SharePoint 2013 应用开发实战》目录
- iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全
- 11 AlarmHandler定时处理类——Live555源码阅读(一)基本组件类
- 批量删除.pyo后缀的文件
- Date类型时间转换
- -fomit-frame-pointer 编译选项在gcc 4.8.2版本中的汇编代码研究
- Html5 常见的新增API详解
- 用Time Machine做更换电脑工具
- OnePlus One(一加1)刷机Kali Nethunter完整教程
- Highcharts 带有数据标签曲线图表
- WM_PAINT消息详解,使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息(WIN7里有变化,“调整视觉效果”,将“启用桌面组合”去掉)
- android端从服务器抓取的几种常见的数据的处理方式
- PowerShell 并行执行任务
- Mongodb基础与入门
- Stackoverflow 最受关注的 10 个 Java 问题
- Java 中 String 的字面量与 intern 方法
- SpringMvc+Mybatis+Maven+Mysql做一个CRUD的简单例子
- jenkins安装教程
热门文章
- 潭州课堂25班:Ph201805201 周五 (课堂笔记)
- (转)【Java线程】Java内存模型总结
- SVN解决本地版本控制与服务器版本冲突问题
- 常用的机器学习&;数据挖掘知识(点)总结
- axios 取消请求的方法
- ERROR: While executing gem … (Gem::RemoteFetcher::FetchError)
- C#高级编程----错误和异常的总结
- Toast信息提示:下拉收起(基于jQuery)(app信息提示更新)
- 修改文件夹的protection level之后,哪个job会来执行re-stripe的操作呢?
- 浅谈常用的几种web攻击方式