一、响应头的Content-Type
响应头的Content-Type的决定了该使用什么方式来解析数据,这一点一般都比较了解。
二、请求头的Content-Type
我们在发送post数据的时候,由于数据放在body里面,并且可以发送很多类型的的数据,所以在这种情况下Content-Type将会非常重要,直接影响着对方如何来解析你发送的数据。
GET 请求不存在请求实体部分,键值对参数放置在 URL 尾部,因此请求头不需要设置 Content-Type 字段。
我们打开postman,点击body支持五种类型,分别是:form-data、x-www-form-urlencoded、raw、binary、GraphQL
1、form-data
我们知道在form表单中要想上传文件,那么enctype应该设置为 multipart/form-data
,类似于这样:
<form method="post" enctype="multipart/form-data">
<input type="text" name="title" value="harttle">
<input type="file" name="avatar">
<input type="submit">
</form>
将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。
在postman中点击form-data。新建两个键值对,并将鼠标移到任意一个key上面,会出来一个下拉箭头,你可以指定该字段值的类型,可以是文本或文件,如果你选择文件,那么value处可以选择文件。
我们切换到Headers标签页就可以看到 Content-Type,这是postman根据你选择的Body类型自动生成的。
点击发送,查看接收到的数据
boundary
后面的值"--------------------------784773003720398747551891
"很明显就是后面字段之间的分割符。如果是文件的话,还会标注文件的名称和类型,由此可见body里面的数据便很容易就被解析清楚了。2、x-www-form-urlencoded
将表单内的数据转换成 key-value 对,并以 & 符拼接成一个串,并且这是默认的类型。urlencoded的意思是如果最终的字符串存在非ASCII字符集的字符,将会执行 urlencode 来编码。
把鼠标移到key的字段上面并没有出现text/file
的下拉框,可见,value只支持文本类型。
切换到 Headers
点击发送,查看接收的数据
3、raw
顾名思义就是原始数据,并且需要设置数据的类型以便对方可以正确的解析 text / javascript / json / html / xml。默认是 text。针对不同的数据类型,Headers 里面的Content-Type会有不同的值。
text => text/plain
javascript => application/javascript
json => application/json
html => text/html
xml => application/xml
4、binary
将文件中的内容发送出去,并不会发送文件名称和类型等信息,这个与 form-data 是有区别的。Content-Type 为 text/plain
比如文本文件
图片文件
最后需要名称一点的是,严格来说,post的数据只会在body里面,也就是对方只会去body里面取,比如:将body置空,将参数放在url中,使用post发送,那么对方什么也收不到。