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

时间:2013-09-30 17:26:37

标签: c# http post

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

HTTP中没有任何内容可以阻止发布二进制数据。您不必将二进制数据转换为base64或其他文本编码。虽然常见的“key1 = val1& key = val2”使用非常传统且方便,但并不是必需的。它只取决于发送者和接收者的共识。请参阅这些主题或谷歌“http post二进制数据”等。

Sending binary data over http

How to correctly send binary data over HTTPS POST?