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, но это, похоже, не единственная проблема. Поэтому я действительно ищу еще одно объяснение.
Любые идеи приветствуются!
Ответы
Ответ 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