在HTTP的请求头中,可以使用Content-type来指定不同格式的请求信息。
Content-type的类型
常见的媒体格式类型:
text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png:png图片格式
以applicaton开头的没提类型:
application/json : JSON数据格式 application/xhtml+xml :XHTML格式 application/xml : XML数据格式 application/atom+xml :Atom XML聚合格式 application/pdf :pdf格式 application/javascript :js格式 application/msword : Word文档格式 application/octet-stream : 二进制流数据(如常见的文件下载) application/x-www-form-urlencoded :form表单默认的数据格式类型,form表单数据被编码为key/value格式发送到服务器。
另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式。
除了原生的content-type,开发人员也可以完全自定义数据提交格式!
最常用的四种:
application/x-www-form-urlencoded,form表单默认的数据格式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。比如下面的http请求格式:
# Request Headers
POST
/adduser HTTP
/1.1
Host
: localhost
:8030
Connection
: keep
-alive
Content
-Length
: 16
Pragma
: no
-cache
Cache
-Control
: no
-cache
Origin
: chrome
-extension
://fdmmgilgnpjigdojojpjoooidkmcomcm
User
-Agent
: Mozilla
/5.0 (Windows NT
6.1; Win64
; x64
) AppleWebKit
/537.36 (KHTML
, like Gecko
) Chrome
/66.0.3359.181 Safari
/537.36
Content
-Type
: application
/x
-www
-form
-urlencoded
Accept
: *
application/json,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON字符串。服务端语言也有很多函数去解析JSON,使用JSON可以支持更加复杂的结构化数据。比如下面的http请求格式:
# Request Headers
POST
/adduser HTTP
/1.1
Host
: localhost
:8030
Connection
: keep
-alive
Content
-Length
: 24
Pragma
: no
-cache
Cache
-Control
: no
-cache
Origin
: chrome
-extension
://fdmmgilgnpjigdojojpjoooidkmcomcm
User
-Agent
: Mozilla
/5.0 (Windows NT
6.1; Win64
; x64
) AppleWebKit
/537.36 (KHTML
, like Gecko
) Chrome
/66.0.3359.181 Safari
/537.36
Content
-Type
: application
/json
Accept
: *
multipart/form-data,对用于在表单中上传文件时,也可以上传普通数据,只需要让from的ectyle等于multipart/form-data就可以了。比如下面的http请求格式:
# Request Header
POST
/adduser HTTP
/1.1
Host
: localhost
:8030
Connection
: keep
-alive
Content
-Length
: 232
Pragma
: no
-cache
Cache
-Control
: no
-cache
Origin
: chrome
-extension
://fdmmgilgnpjigdojojpjoooidkmcomcm
User
-Agent
: Mozilla
/5.0 (Windows NT
6.1; Win64
; x64
) AppleWebKit
/537.36 (KHTML
, like Gecko
) Chrome
/66.0.3359.181 Safari
/537.36
Content
-Type
: multipart
/form
-data
; boundary
=----WebKitFormBoundaryBRi81vNtMyBL97Rb
Accept
: *
这种格式的数据会有一个边界线boundary(这里就是------WebKitFormBoundaryBRi81vNtMyBL97Rb)用于分割不同的字段,为了避免与正文内容重复,boundary很长很复杂。消息主体以boundary开始,紧接着就是内容描述信息,然后是回车,最后是字段具体的内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体以boundary结束。
text/xml 它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:
POST http
://www
.example
.com HTTP
/1.1
Content
-Type
: text
/xml
<?xml version
="1.0"?>
<methodCall>
<methodName>examples
.getStateName
</methodName
>
<params>
<param>
<value><i4>41</i4
></value
>
</param
>
</params
>
</methodCall
>
参考: https://imququ.com/post/four-ways-to-post-data-in-http.html