Подтвердить что ты не робот

Android 2.2 и 2.3 Загрузка PDF через HTTPS кажется сломанной

Я с ума сходила о загрузке 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, но это, похоже, не единственная проблема. Поэтому я действительно ищу еще одно объяснение.

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

4b9b3361

Ответ 1

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

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

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

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

http://greenbytes.de/tech/tc2231

Ответ 2

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

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

Ответ 3

Помимо срока действия сертификата, порядок цепочки CA также важен для того, чтобы диспетчер загрузки 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