0

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

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

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

4

3 回答 3

2

HTTP 中没有任何东西可以阻止二进制数据的发布。您不必将二进制数据转换为 base64 或其他文本编码。尽管常见的“key1=val1&key=val2”用法非常传统且方便,但它不是必需的。它只取决于发送者和接收者达成的协议。请参阅这些线程或谷歌“http post binary data”等。

通过 http 发送二进制数据

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

于 2013-09-30T17:54:29.200 回答
1

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

因此,POST 可以包含“复杂对象”,如果它们被适当地编码成文本。

于 2013-09-30T17:30:25.277 回答
1

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

PHP有一个特定的方法来处理这个..这个:

a[]=1&a[]=2

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

这:

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

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

我还在一些框架中看到了这种格式:

a.foo=bar&b.gir=zim

因此,虽然 urlencoding 没有特定的标准语法来执行此操作……但这并不意味着您可以添加含义并进行自己的后处理。

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

于 2013-09-30T17:31:07.810 回答