application / json和application / x-www-form-urlencoded中的差异


Answers:


187

第一种情况是告诉Web服务器您正在发布JSON数据,如下所示:

{ Name : 'John Smith', Age: 23}

第二个选项是告诉Web服务器您将对URL中的参数进行编码,如下所示:

Name=John+Smith&Age=23

17
它对服务器端有什么影响。我看到像stackoverflow和Twitter之类的网站x-www-form-urlencoded用于AJAX请求(如表决等)。发回的响应是JSON。我认为最好有一个对称的请求/响应对,即两个JSON。
用户

@buffer我也很好奇知道对称问题的答案。
亚当·约翰斯

1
@AdamJohns:这个博客是值得一读的虽然它并不完全回答“为什么”:homakov.blogspot.in/2012/06/...
用户

21
@buffer我的理解是使用JSON作为contentType,这将在要发送的数据更复杂且涉及大量层次结构时提供帮助。.而编码形式的表单很适合在url中发送简单的参数,而这些参数可以在后端读取而无需太多代码。 ..我想这回答了其中的部分原因。
Ankit Srivastava 2015年

@Medorator最近的评论。尽管例如,当您发送带有对象数组的复杂JSON对象时,使用application/x-www-form-urlencoded会混淆服务器(在我的情况下,Elixir使用Poison)并导致对象的某些不正确解析(以某种方式转换了嵌套数组)对象到地图,而不是列表)。application/json在这种情况下,使用应该是正确的选择。
xji

6

webRequest.ContentType =“ application / x-www-form-urlencoded”;

  1. 哪里应用程序/ x-WWW的形式了urlencoded的名字从何而来?

    如果发送HTTP GET请求,则可以使用查询参数,如下所示:

    http://example.com/path/to/page?名称=雪貂和颜色=紫色

    字段的内容被编码为查询字符串。该application/x-www-form- urlencoded的名字来自于以前的网址查询参数,但查询参数是在请求的主体中,而不是网址。

    整个表格数据以长查询字符串的形式发送。查询字符串包含以字符分隔的名称-值

    例如,field1 = value1&field2 = value2

  2. 它可以是一个简单的请求,称为简单- 不要触发飞行前检查

    简单请求必须具有一些属性。您可以在这里查看更多信息。其中之一是,对于简单请求,Content-Type标头仅允许使用三个值

    • 应用程序/ x-www-form-urlencoded
    • 多部分/表单数据
    • 文字/纯文字

3.对于大多数平面参数树,尝试并测试了application / x-www-form-urlencoded。

request.ContentType =“ application / json; charset = utf-8”;

  1. 数据将为json格式。

默认情况下,axiossuperagent是两个较流行的npm HTTP库,它们与JSON主体一起使用。

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. “ application / json” Content-Type是 预检请求之一

现在,如果请求不是简单请求,则浏览器会通过OPTIONS方法自动在原始请求之前发送HTTP请求,以检查发送原始请求是否安全。如果可以,则发送实际请求。您可以在这里查看更多信息。

  1. application / json是初学者友好的。URL编码的数组可能是一场噩梦!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.