post数据类型以及http请求头的Content-Type详解

一、响应头的Content-Type
响应头的Content-Type的决定了该使用什么方式来解析数据,这一点一般都比较了解。

二、请求头的Content-Type

示例demo地址:https://gitee.com/phprao/socket/blob/master/server/socketServerEpoll.php
是一个tcp服务

我们在发送post数据的时候,由于数据放在body里面,并且可以发送很多类型的的数据,所以在这种情况下Content-Type将会非常重要,直接影响着对方如何来解析你发送的数据。
GET 请求不存在请求实体部分,键值对参数放置在 URL 尾部,因此请求头不需要设置 Content-Type 字段。

我们打开postman,点击body支持五种类型,分别是:form-data、x-www-form-urlencoded、raw、binary、GraphQL
post数据类型以及http请求头的Content-Type详解_第1张图片
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处可以选择文件。
post数据类型以及http请求头的Content-Type详解_第2张图片
post数据类型以及http请求头的Content-Type详解_第3张图片
我们切换到Headers标签页就可以看到 Content-Type,这是postman根据你选择的Body类型自动生成的。
post数据类型以及http请求头的Content-Type详解_第4张图片
点击发送,查看接收到的数据
post数据类型以及http请求头的Content-Type详解_第5张图片
boundary后面的值"--------------------------784773003720398747551891"很明显就是后面字段之间的分割符。如果是文件的话,还会标注文件的名称和类型,由此可见body里面的数据便很容易就被解析清楚了。

2、x-www-form-urlencoded
将表单内的数据转换成 key-value 对,并以 & 符拼接成一个串,并且这是默认的类型。urlencoded的意思是如果最终的字符串存在非ASCII字符集的字符,将会执行 urlencode 来编码。
把鼠标移到key的字段上面并没有出现text/file的下拉框,可见,value只支持文本类型。
post数据类型以及http请求头的Content-Type详解_第6张图片
切换到 Headers
post数据类型以及http请求头的Content-Type详解_第7张图片
点击发送,查看接收的数据
post数据类型以及http请求头的Content-Type详解_第8张图片
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

post数据类型以及http请求头的Content-Type详解_第9张图片
post数据类型以及http请求头的Content-Type详解_第10张图片
4、binary
将文件中的内容发送出去,并不会发送文件名称和类型等信息,这个与 form-data 是有区别的。Content-Type 为 text/plain
比如文本文件
post数据类型以及http请求头的Content-Type详解_第11张图片
post数据类型以及http请求头的Content-Type详解_第12张图片
图片文件
post数据类型以及http请求头的Content-Type详解_第13张图片

最后需要名称一点的是,严格来说,post的数据只会在body里面,也就是对方只会去body里面取,比如:将body置空,将参数放在url中,使用post发送,那么对方什么也收不到。
post数据类型以及http请求头的Content-Type详解_第14张图片
post数据类型以及http请求头的Content-Type详解_第15张图片

你可能感兴趣的:(杂项)