一、起因
最近在做一个类似接口测试的功能,所以对于get与post请求有了进一步的了解。由于与后端合作的过程中,出现了请求发送成功,但是后端参数接受不到的情况,所以写下本篇小笔记。
二、正文
前言:
前后端在进行通信的过程中,很常用的就是http网络请求,而htttp网络请求最常使用的两种就是get请求,一般用来获取数据,post请求,一般用来提交或上传数据。前后端通信过程中不仅要指定好接口是以何种方式(get/post/delete/put)获取的,通常还要指定传输过程中,数据内容的类型,这就是本文的重点---->Content-Type。
(1)那么Content-Type具体是什么,它有什么作用呢?
Content-type顾名思义:内容的类型,一般指数据以何种方式组织的,前后端一般通信过程中需要指明这个类型,这样在接受到数据的一方才知道如何解析。举个简单的例子:A送给了B一个密码盒,通过邮政快递员的方式送到B手中,但是B需要知道密码盒的密码才能打开它,才能知道里面装了什么东西。其中快递员就相当于http协议,邮政属于众多快递行业的一个,它相当于get/post请求,而密码属于Content-Type,它通知我们以何种方式获取想要的内容。
(2)由于Content-Type包含的内容很多,本文介绍其中一个:application/XXX与get、post的关系
1)一般来说,一个普通的get请求是不需要指定content-type的,因为一个普通的get请求属于简单结构,它一般携带的数据直接拼接在URL的尾部:
数据就是下面的Query String里面的内容
2)post请求相对于get请求,需要携带的数据量大,所以需要设置content-type
post请求体的Content-Type:application/json,其数据在Request Payload里面,告诉服务器此时携带的数据格式是json格式的字符串,请使用对应格式解析
post请求体的Content-Type:application/multipart/form-data,其数据在form data里面,,告诉服务器此时携带的数据格式是multipart/form-data格式,请使用对应格式解析
由于:application/multipart/form-data即可以上传表单,也可以上传文件,
所以实际上传的时候每部分数据都会加上boundary,
实际上传过程消息体封装:
----WebKitFormBoundary '请求体boundary的字符串'
数据1
----WebKitFormBoundary '请求体boundary的字符串'
数据2
......
----WebKitFormBoundary '请求体boundary的字符串'
数据n
3)post请求体的Content-Type:application/x-www-form-urlencoded,其数据虽然也在form data里面,但它的格式是以键值对的格式添加到http Body里面的。
告诉服务器此时携带的数据格式是x-www-form-urlencoded格式,请使用对应格式解析
x-www-form-urlencoded实际传输过程中数据的封装类似如下:
这篇写的比我好:https://www.jianshu.com/p/53b5bd0f1d44