ztf.net.cn
七牛云
您当前的位置: 首页 >  个人博客

四种常见的 POST 提交数据方式对应的content-type取值

平常经常使用post请求数据,post请求大致分为4种类型,每种类型的区别到底是什么?

🐯 application/x-www-form-urlencoded


浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):

POST http://www.example.com HTTP/1.1

Content-Type: application/x-www-form-urlencoded;charset=utf-8

title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

1、Content-Type 被指定为 application/x-www-form-urlencoded;提交的

2、数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。

🐤 multipart/form-data


我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值。直接来看一个请求示例:


1、首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。

2、Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。关于 mutipart/form-data 的详细定义,请前往 rfc1867 查看。

注意:这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。

🦋 application/json


实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。

𝑃𝑂𝑆𝑇 ℎ𝑡𝑡𝑝://𝑤𝑤𝑤.𝑒𝑥𝑎𝑚𝑝𝑙𝑒.𝑐𝑜𝑚𝐻𝑇𝑇𝑃/1.1𝐶𝑜𝑛𝑡𝑒𝑛𝑡−𝑇𝑦𝑝𝑒:𝑎𝑝𝑝𝑙𝑖𝑐𝑎𝑡𝑖𝑜𝑛/𝑗𝑠𝑜𝑛;𝑐ℎ𝑎𝑟𝑠𝑒𝑡=𝑢𝑡𝑓−8

"𝑡𝑖𝑡𝑙𝑒":"𝑡𝑒𝑠𝑡","𝑠𝑢𝑏":[1,2,3]


🐝 text/xml

XML-RPC(XML Remote Procedure Call):是一种使用 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>

</params>

</methodcall>


ZTF

ZTF|时间:2022-11-12

如果缘分安排我们相遇,请不要让她擦肩而过。扫一扫二维码,加我为好友吧!
标签云