HTTP POST - 它可以直接包含复杂对象吗?

本文关键字:复杂 包含 对象 POST HTTP | 更新日期: 2023-09-27 18:33:24

从我所读到的所有内容来看,它似乎总是string=string&string=string...的形式(所有字符串都被编码以排除&=),但是,搜索它(例如维基百科,SO,...我没有发现这被提及为明确的限制。

(当然,可以发送复杂对象二进制的 base64 字符串。这不是问题所在。但:

POST 可以直接包含复杂对象还是全部作为字符串发送?

HTTP POST - 它可以直接包含复杂对象吗?

HTTP 中没有任何内容可以阻止二进制数据的发布。 您不必将二进制数据转换为 base64 或其他文本编码。虽然常见的"key1=val1&key=val2"用法非常广泛,但不是必需的。这只取决于发送方和接收方同意的内容。查看这些线程或谷歌"http post 二进制数据"等。

通过 http 发送二进制数据

如何通过HTTPS POST正确发送二进制数据?

它只是一个字符串,就像任何二进制流一样。不过,有多种方法可以对复杂对象进行编码以适应字符串。base64 是一个选项,JSON 也是如此(后者可能更可取)。

PHP有一个特定的方法来解决这个问题。这:

a[]=1&a[]=2

将生成一个包含 1、2 的数组。

这:

a[foo]=bar&a[gir]=zim

还创建一个包含 2 个键的数组。

我也在一些框架中看到过这种格式:

a.foo=bar&b.gir=zim

因此,虽然urlencode没有特定的标准语法来做到这一点......但这并不意味着你可以添加含义并进行自己的后处理。

如果你正在构建一个API,你最好不要使用urlencodeing......还有更多功能和更好的格式。您可以使用任何您想要的Content-Type

HTTP 本身只是基于字符串。没有"对象"的概念,只有文本。"对象"的定义取决于您通过HTTP传输的任何数据格式(XML,JSON,二进制文件等)。

因此,如果将"复杂对象"适当地编码为文本,则 POST 可以包含它们。