背景
跟接口对接的时候经常会发现这边传的格式和位置,跟接口套不上,糊里糊涂的。
Query String Parameters、Form Data、Request Payload
HTTP请求中不同的请求方式和设置不同的Content-Type时,参数传递的方式会不一样,
一起了解这三种形式:Query String Parameters、Form Data、Request Payload;
这三种形式在chrome devTools 里也会有体现。
Get请求
GET请求时,参数会以 url string
的形式进行传递,即?后的字符串则为其请求参数,并以 &
作为分隔符。
1 | Request URL: http://test.com?from_type=省&from_name='四川省' |
Post请求
有两种形式的请求体:FormData
,Request Payload
FormData
当发起一次Post请求,若未指定 Content-type
,则默认 content-type
为 application/x-www-form-urlencoded
,
即参数会以 FormData
的形式进行传递,不会显示出现在请求URL中。传递给接口的是 key1=value1&key2=value2
的形式。
formData()方法
当我们遇到一些文件上传功能时,我们需要使用原生的 formData()
来进行数据组装,
且 content-type
需要设置为 multipart/formdata
http请求头1
2Request URL: http://test.com/upload
Request Method: POST
其中,WebKitFormBoundarysBkB6WoEBvbCRkmh
为浏览器随机生成的 boundary
,作为分隔参数,作用等同于 &
。
Request Payload
当发起一次post请求,若 Content-Type
为 application/json
,则参数会以 Request Payload
的形式进行传递(数据格式为json),
不会显示出现在请求url中。传递给接口的是 JSON字符串
的形式。
特殊
在实际对接中,即使知道里上面这些分类,也还是会出错,因为还有一种情况。
我们讲的 Get
,Post
都是基于应用层的,基于 http
协议的,然后应用层下面是传输层,tcp
协议,也就是在 post
和 get
,在传输上没啥区别,
也就是说 post请求
也可以以 url string
的形式进行传递,即?后的字符串则为其请求参数,并以 &
作为分隔符。重点看服务端接不接。
1 | // axios文档的摘要 |