我正在使用Postman Chrome扩展程序来测试网络服务。有三种可用于数据输入的选项。我想原始是发送JSON。另外两个,form-data和x-www-form-urlencoded之间有什么区别?
答案 0 :(得分:179)
这些是W3C定义的不同表单内容类型。 如果您想发送简单的文本/ ASCII数据,那么 x-www-form-urlencoded 将起作用。这是默认值。
但是,如果您必须发送非ASCII文本或大型二进制数据,那么 form-data 就是为此。
如果要发送纯文本或JSON或任何其他类型的字符串,可以使用原始。顾名思义,Postman发送您的原始字符串数据,无需修改。您可以使用下拉列表中的内容类型标头设置要发送的数据类型。
当您要将非文本数据附加到请求时,可以使用二进制,例如视频/音频文件,图像或任何其他二进制数据文件。
请参阅此链接以进一步阅读: Forms in HTML documents
答案 1 :(得分:79)
这更好地解释了: Postman docs
请求正文
在构建请求时,您将经常处理请求正文编辑器。 Postman允许您发送几乎任何类型的HTTP请求(如果您无法发送内容,请告诉我们!)。正文编辑器分为4个区域,根据正文类型有不同的控制。
表单数据
multipart / form-data是Web表单用于传输数据的默认编码。这模拟在网站上填写表单并提交。表单数据编辑器允许您为数据设置键/值对(使用键值编辑器)。您也可以将文件附加到密钥。请注意,由于HTML5规范的限制,文件不会存储在历史记录或集合中。您必须在发送请求时再次选择该文件。urlencoded的
此编码与URL参数中使用的编码相同。您只需输入键/值对,Postman将正确编码键和值。请注意,您无法通过此编码模式上传文件。表单数据和urlencoded之间可能存在一些混淆,因此请务必首先检查您的API。
原始
原始请求可以包含任何内容。除非替换环境变量,Postman不会触摸在原始编辑器中输入的字符串。无论你在文本区域放置什么,都会随请求一起发送。原始编辑器允许您设置格式类型以及应与原始主体一起发送的正确标题。您也可以手动设置Content-Type标头。通常,您将在此处发送XML或JSON数据。
二进制
二进制数据允许您发送无法在Postman中输入的内容。例如,图像,音频或视频文件。您也可以发送文本文件。如前面在表单数据部分中所提到的,如果您通过历史记录或集合加载请求,则必须重新附加文件。
<强>更新强>
正如VKK所指出的,WHATWG spec说urlencoded是表单的默认编码类型。
这些属性的无效值默认值为application / x-www-form-urlencoded状态。 enctype属性的缺省值default也是application / x-www-form-urlencoded状态。
答案 2 :(得分:16)
multipart / form-data
请注意。有关文件上传的其他信息,请参阅RFC2388,包括向后兼容性问题,&#34; multipart / form-data&#34;和其他内容类型,性能问题等。
有关表单安全问题的信息,请参阅附录。
内容类型&#34; application / x-www-form-urlencoded&#34;发送大量二进制数据或包含非ASCII字符的文本效率很低。内容类型&#34; multipart / form-data&#34;应该用于提交包含文件,非ASCII数据和二进制数据的表单。
内容类型&#34; multipart / form-data&#34;遵循RFC2045中概述的所有多部分MIME数据流的规则。 &#34; multipart / form-data&#34;的定义可在[IANA]注册表中找到。
A&#34; multipart / form-data&#34; message包含一系列部分,每个部分代表一个成功的控件。部件以相同的顺序发送到处理代理,相应的控件出现在文档流中。部分边界不应出现在任何数据中;如何做到这一点超出了本规范的范围。
与所有多部分MIME类型一样,每个部分都有一个可选的&#34; Content-Type&#34;标题默认为&#34; text / plain&#34;。用户代理应该提供&#34;内容类型&#34;标题,伴随着#34; charset&#34;参数。
application / x-www-form-urlencoded
这是默认内容类型。使用此内容类型提交的表单必须按如下方式编码:
转义控件名称和值。空格字符由+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by
%HH&#39;替换,百分号和两个十六进制数字表示字符的ASCII代码。换行符表示为&#34; CR LF&#34;对(即%0D%0A').
The control names/values are listed in the order they appear in the document. The name is separated from the value by
=&#39;和名称/值对通过`&amp;&#39;彼此分开。
application/x-www-form-urlencoded
发送到服务器的HTTP消息的主体实质上是一个巨大的查询字符串 - 名称/值对由&符号(&amp;)分隔,名称通过等号符号与值分隔(=)。这方面的一个例子是:
MyVariableOne=ValueOne&MyVariableTwo=ValueTwo
内容类型&#34; application / x-www-form-urlencoded&#34; 对于发送大量二进制数据或包含非ASCII字符的文本效率不高。内容类型&#34; multipart / form-data&#34;应该用于提交包含文件,非ASCII数据和二进制数据的表单。
答案 3 :(得分:1)
以下是一些补充示例,以查看Postman在请求中传递的原始文本。您可以通过打开Postman控制台查看此信息:
标题
content-type: multipart/form-data; boundary=--------------------------590299136414163472038474
身体
key1=value1key2=value2
标题
Content-Type: application/x-www-form-urlencoded
身体
key1=value1&key2=value2
标题
Content-Type: text/plain
身体
This is some text.
标题
Content-Type: application/json
身体
{"key1":"value1","key2":"value2"}