Gro*_*roo 28 proxy http binary-data
我正在寻找有关通过端口80从远程GPRS设备发送/接收数据的最佳方法的建议.
在随机端口上创建普通TCP套接字工作正常,但许多运营商只允许端口80 HTTP流量通过其代理,然后期望HTTP ascii数据(他们可以根据需要修改标头).
那么,我的设备是否应该在持久的http连接上创建POST请求,然后从Web服务接收base64编码的响应?我不确定涉及二进制数据时移动代理的行为如何.有推荐的方法吗?
我可以调整设备的固件和服务器端应用程序.
[编辑]
我想知道是否有标准(或多或少)的方式来做到这一点.对于各种数据记录和工业系统,需要通过套接字连接发送大量二进制数据.对于以太网连接,通常只有适应某些防火墙的问题,但是持久的二进制连接在任意端口上建立都没有问题.
但是,移动ISP倾向于仅限制端口80的"数据计划".他们也可以随意使用HTTP标头,也可能是HTML数据本身.这是我需要识别潜在陷阱和规避它们的方法.
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类型,没有进一步说明什么类型 - 并且沿途的任何代理应该不管它.