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

Pri*_*wal 132 json web-services http-headers

有什么区别

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

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

Ica*_*rus 158

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

{ Name : 'John Smith', Age: 23}
Run Code Online (Sandbox Code Playgroud)

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

Name=John+Smith&Age=23
Run Code Online (Sandbox Code Playgroud)

  • @buffer我的理解是使用JSON,因为当要发送的数据更复杂并且涉及大量层次结构时,contentType会有所帮助.而编码的表单很适合在url中发送简单的params,可以在后端读取而无需太多代码. ..我猜这回答了它的部分原因. (18认同)
  • 它对服务器端有什么影响.我看到像stackoverflow和Twitter这样的网站使用`x-www-form-urlencoded`来表示AJAX请求,比如投票等.回送的响应是`JSON`.我认为最好有一个对称的请求/响应对,即两个JSON. (13认同)
  • @AdamJohns:这个博客值得一读,尽管它没有完全回答“为什么”:http://homakov.blogspot.in/2012/06/x-www-form-urlencoded-vs-json-pros-and。 html (2认同)

fgu*_*gul 24

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

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

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

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

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

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

    例如 field1=value1&field2=value2

  2. 它可以是简单的请求,称为 simple -不要触发预检

    简单的请求必须有一些属性。你可以在这里查看更多信息。其中之一是对于简单请求的 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
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. “application/json” Content-Type 是 预检请求之一

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

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


ara*_*b31 9

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

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

{"Name": "John Smith", "Age": 23}
Run Code Online (Sandbox Code Playgroud)

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

而在

Name=John+Smith&Age=23
Run Code Online (Sandbox Code Playgroud)

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

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