我在Android中发现了一个非常奇怪的事件。我发现当下载超过3g的图像时,之后计算的sha1与应该服务于服务器上的文件的内容不同。经过进一步调查,我发现图像实际上是缩小尺寸并重新编码的。看来我的移动运营商(verizon)正在尝试优化我正在下载的文件。
我的问题是,是否有其他人可以确认移动网络可能会在您的文件落入您的设备之前对其进行优化?如果是这样,是否有某种设置在某处以便我可以禁用它。
在我的应用程序中,知道我下载的文件的sha1等于服务器所说的应该是非常重要的。
这是关于verizon优化3g传输的article。
答案 0 :(得分:0)
您没有说,但我们假设这是一个HTTP连接。
简而言之,他们正在努力节省带宽。 3G不是免费的!
如果您直接请求资源(GET),那么您将处理所有处理HTTP响应的中介(即代理,网关),并且您可以确定他们可以在标题中看到MIME类型,并且表现得相应。
您可以尝试在请求中使用HTTP Accept
标头,并使用q
参数“提示”您希望获得最高保真度。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Accept: image/png;q=1
q
范围从0到1.您可以使用较低的值(超过1)逃脱。请阅读链接部分了解更多详情。
您还可以检查传入的Content-Type
标头;它可能会揭示质量或甚至MIME类型是否有“声明”的变化。它可能会告诉你它做了什么!
如果“标准”能为你做好工作,那就太棒了!
如果这不起作用,并且您已经控制了服务器端,请使用替代的基于文本的编码,如Base64,中间人无法为您“压缩”。从那以后,SOAP一直在这样做!
如果您确实需要绕过图像压缩,并且Accept
不起作用,您必须自己代理这些类型的请求,并在响应中使用非图像MIME类型对它们进行重新编码。 / p>
如果你要进行自我代理路由,你可能会调用你的图像application/octect-stream
,这是“未解释的字节”的MIME类型。这将允许或多或少地传递数据,并希望让中间人“帮助”你的东西!