Http协议-Content-Type
2020-04-18 本文已影响0人
张明学
http协议是建立在tcp/ip协议之上的应用层协议,主要包括三个部分,状态行,头部信息,消息体。对应一个http请求就是:请求行,请求头,请求体。
协议规定post提交的数据必须包含在消息主体中entity-body中,但是协议并没有规定数据使用什么编码方式。开发者可以自己决定消息主体的格式。
最常用的是:application/x-www-form-urlencoded、multipart/form-data、application/json
application/x-www-form-urlencoded
application/x-www-form-urlencoded是最常见的传统表单提交方式,不支持附件。只是数据按照key=&value=的方式放在请求体中,也会对数据进行urlencoded编码。
示例:
Request Headers
User-Agent: PostmanRuntime/7.24.0
Accept: */*
Cache-Control: no-cache
Host: 127.0.0.1:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Request Body
userName: "张三"
userAge: "18"
详细报文体如下:
userName=%E5%BC%A0%E4%B8%89&userAge=18
multipart/form-data
multipart/form-data是常用的附件上传的请求方式,由于可以在请求体中放普通的参数,也可以放附件数据,因此,该请求方式特点是在请求头中会指定普通的key、value和附件key,value的分隔符。可以有很多个,分别分隔开。
Request Headers
User-Agent: PostmanRuntime/7.24.0
Accept: */*
Cache-Control: no-cache
Host: 127.0.0.1:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------193199529493545754609258
Content-Length: 277
Request Body
userName: "张三"
userAge: "18"
boundary就行数据分隔符,详细请求体如下:
----------------------------193199529493545754609258
Content-Disposition: form-data; name="userName"
张三
----------------------------193199529493545754609258
Content-Disposition: form-data; name="userAge"
18
----------------------------193199529493545754609258--
application/json
现在越来越多的应用使用application/json,用来告诉服务端消息主体(报文体)是序列化的json字符串。服务端接收解析起来也比较方便,SpringMVC,SpringBoot都已经支持。
示例:
Request Headers
Content-Type: application/json
User-Agent: PostmanRuntime/7.24.0
Accept: */*
Cache-Control: no-cache
Host: 127.0.0.1:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 36
Request Body
userName: "张三"
userAge: "18"
详细请求体:
{"userName":"张三","userAge":"18"}
application/xml与application/json类似,就是Content-Type:application/xml,请求体放的是xml格式的数据。
- 另外介绍一下PostMan中:form-data、x-www-form-urlencoded、raw、binary。(PostMan是用得比较多一款http请求工具)
- form-data:就是http请求中的multipart/form-data
- x-www-form-urlencoded:对应的Content-Type=application/x-www-form-urlencode
- raw:对应的Content-Type=application/json、Content-Type=application/text、Content-Type=application/xml,也可能可以上传任意格式的文本如:text、json、xml、html等