通过http发送二进制数据

Gro*_*roo 28 proxy http binary-data

我正在寻找有关通过端口80从远程GPRS设备发送/接收数据的最佳方法的建议.

在随机端口上创建普通TCP套接字工作正常,但许多运营商只允许端口80 HTTP流量通过其代理,然后期望HTTP ascii数据(他们可以根据需要修改标头).

那么,我的设备是否应该在持久的http连接上创建POST请求,然后从Web服务接收base64编码的响应?我不确定涉及二进制数据时移动代理的行为如何.有推荐的方法吗?

我可以调整设备的固件和服务器端应用程序.

[编辑]

我想知道是否有标准(或多或少)的方式来做到这一点.对于各种数据记录和工业系统,需要通过套接字连接发送大量二进制数据.对于以太网连接,通常只有适应某些防火墙的问题,但是持久的二进制连接在任意端口上建立都没有问题.

但是,移动ISP倾向于仅限制端口80的"数据计划".他们也可以随意使用HTTP标头,也可能是HTML数据本身.这是我需要识别潜在陷阱和规避它们的方法.

  • 简单地发送base64编码数据会起作用吗?
  • 如何处理HTTP会话?任意套接字可以保持很长时间,但HTTP动词通常是短暂的.这是否意味着我需要为每个数据包创建一个新连接?或者有没有办法通过单个连接以块的形式发送服务器响应?
  • ISP代理以什么方式处理数据或标题?例如,代理有时可以使连接保持活动状态,即使服务器关闭它也是如此.

joh*_*tok 37

简单地发送base64编码数据会起作用吗?

不需要使用base 64编码 - 这只会增加必须传输的字节数.移动运营商通常会限制对他们理解的内容类型(即图像,样式表等)的响应.

如何处理HTTP会话?

HTTP会话通常通过URL查询参数或cookie值处理.但是,根据你所说的,听起来并不像会话是必要的.

任意套接字可以保持很长时间,但HTTP动词通常是短暂的.这是否意味着我需要为每个数据包创建一个新连接?

HTTP请求可以持续任意长的时间,就像原始TCP套接字一样.如有必要,GET请求可持续数小时.您无需为每个请求创建新连接 - 请查看Connection: Keep-AliveHTTP标头.

或者有没有办法通过单个连接以块的形式发送服务器响应?

如果您不知道响应的长度,您可以省略Content-Length标头,或者最好使用Transfer-Encoding: chunkedHTTP标头.

ISP代理以什么方式处理数据或标题?例如,代理有时可以使连接保持活动状态,即使服务器关闭它也是如此.

ISP不倾向于揭示他们对HTTP响应所做的更改.如果您担心这个问题,一个简单的解决方案就是加密数据并指定Content-EncodingHTTP标头.这将要求您控制HTTP客户端和服务器.


Jay*_*Jay 19

如果可能,您可以将数据作为HTTP请求和响应发送.

HTTP完全能够处理二进制数据:图像一直通过HTTP发送,而且它们是二进制的.人们一直上传和下载任意数据类型的文件没有问题.

只需给它一个mime类型的"application/octet-stream" - 它基本上是二进制数据的通用mime类型,没有进一步说明什么类型 - 并且沿途的任何代理应该不管它.