如何在一个HTTP响应中发送ASCII和二进制数据?

时间:2012-01-10 01:30:56

标签: java ruby-on-rails http

我目前正在客户端使用Java 1.4.2与Rails 3服务器通信。当我们最初设计通信时,返回的所有信息都是ASCII(字母数字),因此我们将使用JSON并将其作为地图返回。现在我们发现还需要返回二进制数据(图像),但我们不想发出两个HTTP请求。

在一个HTTP响应中发送现有ASCII信息和二进制数据的最佳方法是什么?我目前的想法是使用base64或十六进制编码,但我不知道这是否是最佳方式。在服务器(Ruby)端编码和在客户端上解码(Java 1.4.2)的简单方法也是一个巨大的优势。

2 个答案:

答案 0 :(得分:3)

HTTP协议允许将响应返回为multipart/mixed。这样做时,响应被划分为零个或多个部分,每个部分由边界分隔。每个部分(可以)都有自己的标题来描述部分的内容(Content-Type,Content-Length,Content-Disposition等)。所以你可以在响应中有一部分是ASCII文本而另一部分是八位字节流。

使用此响应类型可能是您在一次HTTP调用中发回混合内容的最佳选择,但需要您在Rails代码中进行一些修改。

特别注意,如果您使用相同服务器服务的浏览器客户端,并非所有浏览器都能正确处理multipart/mixed个响应。

答案 1 :(得分:0)

HTTP正文是二进制的。无需ASCII-ize任何数据。 Base64与此无关。

如果您同时控制客户端和服务器,最简单的解决方案就是拥有自己的格式。做任何你喜欢打包/解压缩数据的方法。