一、Content-Type是什么?
在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。它被用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析html或仅仅展示一个文本等。Post请求的内容放置在请求体中,Content-Type定义了请求体的编码格式。数据发送出去后,还需要接收端解析才可以。接收端依靠请求头中的Content-Type字段来获知请求体的编码格式,最后再进行解析。
二、Content-Type的格式
Content-Type:type/subtype ;parameter
type:主类型,任意的字符串,如text,如果是*号代表所有;
subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
parameter:可选参数,如charset,boundary等。
例如:
Content-Type: text/html;
Content-Type: application/json;charset:utf-8;
Content-Type: application/x-www-form-urlencoded;charset:utf-8;
三、 Post请求中常见的Content-Type类型的结构
(1)application/x-www-form-urlencoded
这是浏览器原生的form表单类型,或者说是表单默认的类型。
下面是一个请求实例:
请求报文:
可以看得出,post将请求参数以key1=value1&key2=value2这种键值对的方式进行组织,并放入到请求体中。其中中文或某些特殊字符,如"/"、","、“:" 等会自动进行URL转码。
(2)application/json
能够支持更为复杂的请求结构
现在绝大部分的请求都会以json形式进行传输,post会将序列化后的json字符串直接塞进请求体中。
下面是一个请求实例:
请求报文:(postman查看请求报文,点击Send下面一行的code,然后点击HTTP即可)
可以看到,请求体中就是Json字符串。
(3)multipart/form-data
相较于application/x-www-form-urlencoded它是把数据使用url编码后传送给后端,不适合用于传输大型二进制数据或者包含非ASCII字符的数据,multipart/form-data
就诞生了,专门用于有效的传输文件。
multipart/form-data既可以用于在表单中上传文件,也可以上传键值对。 先看一个请求实例:
请求报文:
可以看得出,首先随机生成了一个boundary字段,这个boundary用来分割不同的字段。
一个请求的参数,会以boundary开始,然后是附加信息(参数名称,文件路径等),再空一行,最后是参数的内容。
请求体最后再以boundary结束。
当然,response中也会有Content-Type为multipart/form-data的响应头。如果此时是导出文件,则响应头还需要添加一个
Content-Disposition:attachment;fileName=文件.后缀
注:Content-Disposition是Content-Type的扩展,告诉浏览器弹窗下载框,而不是直接在浏览器里展示文件。因为一般浏览器对于它能够处理的文件类型,如txt,pdf 等,它都是直接打开展示,而不是弹窗下载框。
原文链接:https://blog.csdn.net/qq_33591903/article/details/104036620
标签:请求,form,Content,application,boundary,Type From: https://www.cnblogs.com/lintest/p/17162963.html