x-www-form-urlencoded Vs json HTTP POST

时间:2012-07-01 10:06:41

标签: php json forms curl content-type

很难决定,
目前我发送数据为x-www-form-urlencoded与php lib curl with

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments));

curl_setopt($curl, CURLOPT_POSTFIELDS, $this->arguments);

第一个问题:第二个似乎是内容长度更大,第一个解决方案可能更好?

对于像平面消息一样实用:

{
    "name": "John",
    "token": "2121232145",
    "code": "7",
    "data": "Hello"
}

但是我也可以有一个代表一个对象的数据字段,在这种情况下我正在考虑它,但这样做(url编码一个Json)是非常冗长和丑陋的消息,

另一方面,我尝试将其作为application / json content-type

发送
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));

对于小消息,内容长度更大但是嵌入了json,显然更好

但x-www-form-urlencoded也接近我需要发送的表单数据,除非嵌入了json

根据内容类型,拥有2个不同的servlet解析方法并不优雅,那么还有另一种选择吗?

2 个答案:

答案 0 :(得分:11)

Here您可以阅读有关格式的类似讨论。

  

如果编码数据的结构保证是一个平面列表   名称 - 值对,x-www-form-urlencoded似乎就足够了。如果   结构可以(任意)复杂(例如嵌套列表或   关联数组),然后肯定使用JSON。

至于我,我是KISS娴熟的。在您的情况下JSON / XML /无论是时间,内存和CPU周期的额外成本。 x-www-form-urlencoded数据结合了可读性和紧凑性,所以我敢打赌它是你的选择。

答案 1 :(得分:8)

x-www-form-urlencoded和JSON是不同的东西。虽然x-www-form-urlencoded只是用于将表单提交给服务器的默认内容类型,但JSON是基于文本和人类可读的格式(标准),用于通过网络连接序列化和发送结构化数据。你不应该比较它们。

  

第二个似乎是更大的内容长度,第一个解决方案是   可能更好吗?

不,没有标有“更好”的解决方案。就像pinepain所说,它实际上取决于你发送什么样的数据以及如何解析/处理它。 JSON非常适合发送带有请求的附加数据。

不要考虑内容长度。考虑要发送和处理的数据和数据结构。如果您只想在请求之间发送和处理结构化数据,并且数据大小各不相同,只需使用JSON即可。它是为此而建的。

两种方法之间的内容长度差异不会成为问题的一部分,因为您的应用不是Facebook,Twitter或谷歌怪物。过早优化是万恶之源。