Android 2.2 и 2.3 Загрузка PDF через HTTPS кажется сломанной - PullRequest
12 голосов
/ 21 февраля 2012

Я схожу с ума по загрузке PDF на мобильные устройства. Вот очередное безумие, наблюдаемое на Android 2.2 и 2.3. Я не мог воспроизвести эту проблему на iPhone или других устройствах, ни в Firefox, ни в других настольных браузерах.

Я загружаю PDF через HTTP, и он отлично работает. Затем я загружаю тот же PDF-файл через HTTPS, и загрузка не заканчивается (и файл теряется):

Download doesn't finish and filename is lost

Я использую эти HTTP-заголовки (и другие, которые здесь не важны):

Content-Disposition: attachment; filename="abc.pdf"
Content-Type: application/pdf

Изменение Content-Disposition на inline или полное его удаление тоже не поможет. Удаление Content-Type приведет к отображению необработанных двоичных данных в окне браузера.

Примечание. Я уже обнаружил проблему, связанную с ненадежными сертификатами SSL , но это, похоже, не единственная проблема. Поэтому я действительно ищу еще одно объяснение.

Любые идеи приветствуются!

Ответы [ 3 ]

16 голосов
/ 21 февраля 2012

Как всегда, после некоторого усердного осмотра есть древний отчет об ошибке в коде Google с большим количеством разочарованных комментариев разработчиков ... Вот две открытые проблемы, связанные с этой проблемой:

Похоже, что загрузка PDF-файлов с использованием SSL с ненадежными сертификатами (что имеет место в моей тестовой среде) не работает точно с упомянутыми мною симптомами

Обновление : это только одна проблема. Но, похоже, он не единственный

Обновление : На самом деле, вот некоторая авторитетная информация по этому вопросу, показывающая, что в то время Content-Disposition была плохо реализована и указана , что объясняет много проблем, возникающих при реализации загрузки через HTTP:

http://greenbytes.de/tech/tc2231

0 голосов
/ 19 августа 2014

Помимо срока действия сертификата, для менеджера загрузки Android также важен порядок цепочки ЦС для загрузки файлов.

Чтобы убедиться, что промежуточные сертификаты находятся в правильном порядке, необходимоможет выполнить следующую команду:

openssl s_client -connect www.google.ch:443 -showcerts | grep ":/[C1]"

Это должно вернуть красиво упорядоченную цепочку, такую ​​как:

0) subject: server
   issuer:  ca1
1) subject: ca1
   issuer:  ca2
2) subject: ca2
   issuer:  ca3

А не что-то вроде этого:

0) subject: server
   issuer:  ca1
1) subject: ca2
   issuer:  ca3
2) subject: ca1
   issuer:  ca2
0 голосов
/ 08 марта 2012

Невозможно проверить это прямо сейчас, так как у меня нет сервера https, работающего где-либо удобно, но имеет ли значение отправка Content-Type: application/octet-stream с заголовками?

Очевидно, исходя из вашей ситуации и требований,это не может быть вариантом.Кроме того, попробуйте с действующим сертификатом SSL!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...