【问题标题】:What are the differences between application/json and application/x-www-form-urlencoded?application/json 和 application/x-www-form-urlencoded 有什么区别?
【发布时间】:2012-04-09 20:41:15
【问题描述】:

有什么区别

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

request.ContentType = "application/x-www-form-urlencoded";

【问题讨论】:

标签: json post content-type x-www-form-urlencoded


【解决方案1】:

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

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

第二种情况是告诉网络服务器您将编码 URL 中的参数:

Name=John+Smith&Age=23

【讨论】:

  • 它对服务器端有什么影响。我看到像 stackoverflow 和 Twitter 这样的网站使用 x-www-form-urlencoded 来处理 AJAX 请求,比如投票等。发回的响应是 JSON。我认为最好有一个对称的请求/响应对,即 JSON。
  • @buffer 我也很想知道你的对称问题的答案。
  • @AdamJohns :这篇博客值得一读,尽管它并没有完全回答“为什么”:homakov.blogspot.in/2012/06/…
  • @buffer 我的理解是使用 JSON 作为 contentType 当要发送的数据更复杂并且涉及很多层次结构时会有所帮助.. 而表单编码很适合在 url 中发送可以读取的简单参数在后端没有太多代码......我想这回答了它的部分原因。
  • @Medorator 迟到的评论。尽管例如,当您发送一个包含对象数组的复杂 JSON 对象时,使用 application/x-www-form-urlencoded 会混淆服务器(在我的情况下 Elixir 使用 Poison)并导致对象解析不恰当(它以某种方式转换对象的嵌套数组映射到地图,而不是列表)。在这种情况下,使用application/json 应该是正确的选择。
【解决方案2】:

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

  1. application/x-www-form-urlencoded的名字从何而来?

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

    http://example.com/path/to/page?name=ferret&color=purple

    字段的内容被编码为查询字符串。 application/x-www-form- urlencoded的名字来自之前的url查询参数,但是查询参数是 在请求正文而不是 url 的位置。

    整个表单数据作为一个长查询字符串发送。查询字符串包含name- 由 & 字符分隔的值

    例如字段1=值1&字段2=值2

  2. 可以将简单请求称为简单 - 不触发预检检查

    简单的请求必须有一些属性。您可以查看here 了解更多信息。之一 它们是 Content-Type 标头只允许三个简单的值 请求

    • application/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请求,检查发送是否安全原始请求。如果没问题,然后发送实际请求。您可以查看here 了解更多信息。

  1. application/json 适合初学者。 URL 编码的数组可能是一场噩梦!

【讨论】:

  • 虽然 application/json 对初学者很友好,但在生产服务器中使用它可以吗?就我而言,前端不是网站,而是移动应用程序
  • 在您的请求中来回使用 JSON 非常好
【解决方案3】:

两者之间最大的区别之一是,对帖子进行 JSON 编码通常会保留发送的值的数据类型(只要它们是有效的 JSON 数据类型),而 application/x-www-form- urlencoded 通常会将所有属性转换为字符串。

例如,在 JSON 编码的帖子中:

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

服务器很可能会将 Age 属性解析为整数 23。

而在

Name=John+Smith&Age=23

服务器很可能会将 Age 解析为字符串“23”。

当然,如果您使用其他层来解析这些值并将它们转换为适当的类型,这可能不是问题。

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多