【发布时间】: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
有什么区别
request.ContentType = "application/json; charset=utf-8";
和
request.ContentType = "application/x-www-form-urlencoded";
【问题讨论】:
标签: json post content-type x-www-form-urlencoded
第一种情况是告诉 Web 服务器您正在发布 JSON 数据,如下所示:
{"Name": "John Smith", "Age": 23}
第二种情况是告诉网络服务器您将编码 URL 中的参数:
Name=John+Smith&Age=23
【讨论】:
x-www-form-urlencoded 来处理 AJAX 请求,比如投票等。发回的响应是 JSON。我认为最好有一个对称的请求/响应对,即 JSON。
application/x-www-form-urlencoded 会混淆服务器(在我的情况下 Elixir 使用 Poison)并导致对象解析不恰当(它以某种方式转换对象的嵌套数组映射到地图,而不是列表)。在这种情况下,使用application/json 应该是正确的选择。
webRequest.ContentType = "application/x-www-form-urlencoded";
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
可以将简单请求称为简单 - 不触发预检检查
简单的请求必须有一些属性。您可以查看here 了解更多信息。之一 它们是 Content-Type 标头只允许三个简单的值 请求
3.对于大多数平面参数树,application/x-www-form-urlencoded 已经过试验和测试。
request.ContentType = "application/json; charset=utf-8";
axios 和 superagent 这两个比较流行的 npm HTTP 库默认使用 JSON 正文。
{ "id": 1, "name": "Foo", "price": 123, "tags": [ "Bar", "Eek" ], "stock": { "warehouse": 300, "retail": 20 } }
现在,如果请求不是简单请求,浏览器会通过OPTIONS方法自动在原始请求之前发送一个HTTP请求,检查发送是否安全原始请求。如果没问题,然后发送实际请求。您可以查看here 了解更多信息。
【讨论】:
两者之间最大的区别之一是,对帖子进行 JSON 编码通常会保留发送的值的数据类型(只要它们是有效的 JSON 数据类型),而 application/x-www-form- urlencoded 通常会将所有属性转换为字符串。
例如,在 JSON 编码的帖子中:
{"Name": "John Smith", "Age": 23}
服务器很可能会将 Age 属性解析为整数 23。
而在
Name=John+Smith&Age=23
服务器很可能会将 Age 解析为字符串“23”。
当然,如果您使用其他层来解析这些值并将它们转换为适当的类型,这可能不是问题。
【讨论】: