邮差Chrome: form-data, x-www-form-urlencoded和raw之间的区别是什么

我正在使用邮递员Chrome扩展测试一个web服务。

有三种数据输入选项。

我猜raw是用来发送JSON的。

另外两个form-datax-www-form-urlencoded之间的区别是什么?

268873 次浏览
这些是W3C定义的不同表单内容类型。 如果你想发送简单的文本/ ASCII数据,那么x-www-form-urlencoded将工作。这是默认值。

但如果你必须发送非ascii文本或大型二进制数据,格式就是用于此的。

如果你想发送纯文本或JSON或任何其他类型的字符串,可以使用。顾名思义,邮差发送原始字符串数据,因为它是没有修改。您发送的数据类型可以通过使用下拉菜单中的content-type头来设置。

二进制可以用于当你想要将非文本数据附加到请求时,例如视频/音频文件,图像或任何其他二进制数据文件。

进一步阅读请参阅此链接: HTML文档中的表单 < / p >

这解释得更好: 邮差文档 < / p >

请求体

在构造请求时,您将大量地处理请求体编辑器。邮递员可以让你发送几乎任何类型的HTTP请求(如果你不能发送一些东西,让我们知道!)身体编辑器分为4个区域,根据身体类型有不同的控制。

格式

这模拟了在网站上填写表单,并提交它。表单数据编辑器允许您为数据设置键/值对(使用键-值编辑器)。您还可以将文件附加到密钥上。请注意,由于HTML5规范的限制,文件不会存储在历史记录或集合中。在发送请求时,您必须再次选择该文件。

urlencoded

此编码与URL参数中使用的编码相同。您只需要输入键/值对,然后Postman将正确地对键和值进行编码。注意,您不能通过这种编码模式上传文件。在form-data和urlencoded之间可能会有一些混淆,所以一定要先检查你的API。

原始请求可以包含任何内容。除了替换环境变量外,Postman不会触及原始编辑器中输入的字符串。无论您在文本区域中输入什么,都会随请求一起发送。原始编辑器允许您设置格式类型以及应该与原始正文一起发送的正确标题。您也可以手动设置Content-Type标头。通常,您将在这里发送XML或JSON数据。

二进制

二进制数据允许你发送你不能在邮差中输入的东西。例如,图像、音频或视频文件。你也可以发送文本文件。正如前面在表单数据部分中提到的,如果通过历史记录或集合加载请求,则必须重新附加文件。

更新

正如VKK所指出的,WHATWG规范说urlencoded是表单的默认编码类型。

这些属性的默认无效值是application/x-www-form-urlencoded状态。enctype属性缺少的默认值也是application/x-www-form-urlencoded状态。

多部分/格式

请注意。有关文件上传的其他信息,包括向后兼容性问题,“multipart/form-data"以及其他内容类型、性能问题等。

有关表格安全问题的信息,请参阅附录。

内容类型“application/x-www-form-urlencoded"对于发送大量二进制数据或包含非ascii字符的文本是低效的。内容类型“multipart/form-data”;应该用于提交包含文件、非ascii数据和二进制数据的表单。

内容类型“multipart/form-data”;遵循RFC2045中概述的所有多部分MIME数据流的规则。“multipart/form-data”的定义可在[IANA]登记处查阅。

一个“多部分/ form-data"消息包含一系列部分,每个部分代表一个成功的控件。按照文档流中出现相应控件的相同顺序将部件发送到处理代理。部分边界不应该出现在任何数据中;如何做到这一点超出了本规范的范围。

与所有多部分MIME类型一样,每个部分都有一个可选的“content - type”;标题默认为“文本/明文”。用户代理应提供“内容-类型”;标题,加上“;charset"参数。

应用程序/ x-www-form-urlencoded

这是默认的内容类型。使用此内容类型提交的表单必须按以下方式编码:

控件名称和值被转义。空格字符替换为+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by %HH',一个百分号和两个十六进制数字表示字符的ASCII码。换行符表示为"CR LF"%0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by ='和名称/值对之间用' &'分开。

application/x-www-form-urlencoded发送到服务器的HTTP消息正文本质上是一个巨大的查询字符串——名称/值对由&号(&)分隔,名称与值由等号(=)分隔。一个例子是:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

内容类型“application/x-www-form-urlencoded"对于发送大量二进制数据或包含非ascii字符的文本是低效的。内容类型“multipart/form-data”;应该用于提交包含文件、非ascii数据和二进制数据的表单。

下面是一些补充示例,用于查看Postman在请求中传递的原始文本。你可以通过打开Postman控制台看到这一点:

enter image description here

格式

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

身体

key1=value1key2=value2

x-www-form-urlencoded

Content-Type: application/x-www-form-urlencoded

身体

key1=value1&key2=value2

原始文本/平原

Content-Type: text/plain

身体

This is some text.

原始json

Content-Type: application/json

身体

{"key1":"value1","key2":"value2"}

让我们把一切都变得简单,这都是关于HTTP请求是如何发出的:

< >强1 - x-www-form-urlencoded enter image description here < / p >

http请求:

GET /getParam1 HTTP/1.1
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: a14f1286-52ae-4871-919d-887b0e273052
Host: localhost:12345
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 55


postParam1Key=postParam1Val&postParam2Key=postParam2Val

2 -生

enter image description here

http请求:

GET /getParam1 HTTP/1.1
Content-Type: text/plain
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: e3f7514b-3f87-4354-bcb1-cee67c306fef
Host: localhost:12345
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 73


{
postParam1Key: postParam1Val,
postParam2Key: postParam2Val
}

3 -格式

enter image description here

http请求:

GET /getParam1 HTTP/1.1
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: 8e2ce54b-d697-4179-b599-99e20271df90
Host: localhost:12345
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------140760168634293019785817
Content-Length: 181


----------------------------140760168634293019785817
Content-Disposition: form-data; name="postParam1Key"


postParam1Val
----------------------------140760168634293019785817--