【问题标题】:Why does my mobile carrier re-encode a file when I download it?为什么我的移动运营商在我下载文件时会重新编码文件?
【发布时间】:2011-10-19 16:07:09
【问题描述】:

我在 Android 中发现了一个非常奇怪的现象。我发现当通过 3g 下载图像时,之后计算的 sha1 与服务器上的文件应该得到的不同。经过进一步调查,我发现图像实际上已缩小尺寸并重新编码。我的移动运营商(verizon)似乎正在尝试优化我正在下载的文件。

我的问题是,其他人是否可以确认移动网络可能会在您的文件登陆您的设备之前对其进行优化?如果是这样,是否有某种设置可以让我禁用它。

在我的应用程序中,知道我下载的文件的 sha1 等于服务器所说的应该是什么,这一点非常重要。

这是一个 article 发现的关于 verizon 优化 3g 传输的信息。

【问题讨论】:

  • 欢迎来到移动世界...您可能还会发现优化图像的数据使用量是根据原始全尺寸文件收费的,而不是优化后的文件。他们确实说只有端口 80 流量得到这种处理,所以只需为您的服务器设置一个新的侦听端口并在该端口上运行。 8080、81等...
  • 他们的网络,他们的规则恐怕......你能用 72dpi 创建所有图像吗?这样他们可能不会被下采样?
  • @Eamorr 我可以试试这个。到目前为止对我有用的一种解决方案是发出“https”请求而不是“http”请求。
  • https 的做法是我没有想到的。如果方便的话,这是一个非常好的快速解决方案。
  • 我也在 t-mobile 上目睹了这种行为。

标签: android http download


【解决方案1】:

你没有说,但我们假设这是一个 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 类型重新编码。

如果您要使用自代理路线,您可能可以通过调用图像application/octect-stream 这是“未解释字节”的 MIME 类型。这将允许或多或少地传递数据,并希望让中介“帮手”远离你的东西!

【讨论】:

  • “Accept”中的“q”参数是优先选择格式,而不是控制特定格式的压缩。
猜你喜欢
  • 2016-12-25
  • 2022-04-02
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多