【问题标题】:x-www-form-urlencoded Vs json HTTP POST [closed]x-www-form-urlencoded Vs json HTTP POST [关闭]
【发布时间】:2012-07-02 03:01:45
【问题描述】:

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

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 内容类型发送

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

小消息的内容长度较大,但嵌入 json 显然更好

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

根据内容类型有两种不同的 servlet 解析方法并不优雅,那么还有其他选择吗?

【问题讨论】:

  • 简短:x-www-form-urlencoded。 LONG:这真的取决于您发送什么样的数据(复杂的嵌套对象或像示例中的几个字段)。此外,这取决于您要如何处理发送的数据,是立即解析和处理还是将其存储然后按原样(以 json 编码格式)发送给用户?
  • @pinepain 数据被发送到 glassfish 服务器,被解析并插入到 Cassandra 数据库中,它可以像这样 {'data': json_encode({'text':'2klines..', 'author':'me'}), 'id':'14141','keywords':json_encode({[{'tag':['blue','red']},{'author':['me']}}), ..} 相当嵌套
  • 用同样的方式做事会简单很多。为什么不到处使用 JSON?因为 PHP 将表单数据视为 $_POST/$_GET/$_REQUEST 变量和带有无聊 file_get_contents('php://input') 的 JSON 数据。我不喜欢世界围绕 PHP 旋转。在 Node.js 中,使用 JSON 代替表单数据非常简单自然。

标签: php json forms curl content-type


【解决方案1】:

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

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

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

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

Content-Length 两种方法之间的差异不会成为问题的一部分,因为您的应用不是 Facebook、Twitter 或 Google 之类的怪物。过早的优化是万恶之源。

【讨论】:

  • 我在这里读到的只是:“过早的优化是万恶之源。使用 JSON。”这没有帮助。 OP 显然在询问两种解决方案之间的差异。此外,谁知道这是否为时过早? OP 可能在项目结束时一直在寻找易于实现的优化选项。
【解决方案2】:

Here 你可以阅读关于格式的类似讨论。

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

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

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2019-03-04
    • 2013-12-20
    • 2017-09-22
    • 2020-04-21
    相关资源
    最近更新 更多