HTTP_POST请求的数据格式

Posted Red风信子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP_POST请求的数据格式相关的知识,希望对你有一定的参考价值。

在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,开发人员也可以完全自定义数据提交格式!

最常用的四种:

  1. 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: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9


# Form Data

name=name&age=11
  1. 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: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9


# Request Payload

"name":"121","age":121
  1. 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: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9


# Request Payload

------WebKitFormBoundaryBRi81vNtMyBL97Rb
Content-Disposition: form-data; name="name"

name1
------WebKitFormBoundaryBRi81vNtMyBL97Rb
Content-Disposition: form-data; name="age"

12
------WebKitFormBoundaryBRi81vNtMyBL97Rb--

这种格式的数据会有一个边界线boundary(这里就是------WebKitFormBoundaryBRi81vNtMyBL97Rb)用于分割不同的字段,为了避免与正文内容重复,boundary很长很复杂。消息主体以boundary开始,紧接着就是内容描述信息,然后是回车,最后是字段具体的内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体以boundary结束。

  1. 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

以上是关于HTTP_POST请求的数据格式的主要内容,如果未能解决你的问题,请参考以下文章

API 控制器 POST 方法 multipart/form-data 在主体内使用边界获取消息

multipart/form-data 没有边界

HTTP首部都有哪些字段?

HTTP报文(message)是什么?请求报文响应报文报文首部(header)报文主体(body)

HTTP Post请求的四种编码方式

从ESPAsyncWebServer请求参数读取数据时的冥想错误