Почему мой оператор мобильной связи перекодирует файл при загрузке?

Я нашел очень странное явление в Android. Я обнаружил, что при загрузке изображения более 3g вычисляемый впоследствии sha1 отличается от того, который должен был быть в файле, находящемся на сервере. После дальнейшего расследования я обнаружил, что изображение было на самом деле уменьшено в размере и перекодировано. Похоже, что мой оператор мобильной связи (verizon) пытается оптимизировать файлы, которые я загружаю. Вот некоторые характеристики исходного файла и загруженного.

Мой вопрос: может ли кто-нибудь еще подтвердить, что мобильные сети могут оптимизировать ваш файл, прежде чем он попадет на ваше устройство? И если так, есть ли где-то какая-то настройка, чтобы я мог отключить это.

В моем приложении очень важно знать, что sha1 файла того, что я скачал, соответствует тому, что, по словам сервера, должно быть.

Вот статья про verizon, оптимизирующую переводы 3g.

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 для "неинтерпретируемых байтов". Это позволило бы более-менее передавать данные и, как мы надеемся, не позволяло посредникам "помогать" от ваших вещей!

Другие вопросы по тегам