Пуленепробиваемые загрузки больших PDF-файлов от неправильной конфигурации браузера?
У меня есть сайт под управлением Apache, основная цель которого в жизни - обслуживать большие (10-30 Мб) PDF-файлы. Я довольно часто получаю электронные письма от пользователей, которые говорят, что у них проблемы с загрузкой файлов:
msgstr "начнется загрузка, но загрузка не завершена, она зависает примерно на 25%."
"Кажется, что страница найдена, но просто вращается и вращается... Я отпускаю ее 5 минут. Нет данных. ОДНАКО: Когда я выбрал" загрузить ", я получил ее за считанные секунды".
"Он как-то начинает загружать PDF примерно на 10%, как в Chrome, так и в Firefox".
Поскольку я не могу воспроизвести проблемы, и они, похоже, не возникают для подавляющего большинства пользователей, очень трудно понять, в чем дело. Предположительно пользователи каким-то образом неправильно настроили свои браузеры или плагины, или, возможно, в некоторых случаях это проблема удобства использования их браузера или плагина. Заставить пользователей сообщать о конкретных сообщениях об ошибках или их поведении, описывать их конфигурацию и т. Д. - все равно что тянуть зубы.
Я видел некоторые другие вопросы, которые описывают подобные проблемы, но они кажутся специфичными для IIS, тогда как я использую apache:
Эта ошибка не соответствует (смутным) отчетам, которые я получил:
Существуют ли какие-либо методы для пуленепробиваемости моей установки, чтобы пользователи не сталкивались с такими проблемами? Обнаружение браузера в javascript с соответствующим сообщением? Предупреждение пользователей о конкретных комбинациях браузера / плагина или автоматическое обнаружение этих комбинаций? Прямо сейчас, я даже не могу сказать, какие строки посмотреть в моем файле журнала apache, чтобы увидеть, записана ли какая-либо ошибка на стороне сервера. Возможно, все это становится более сложным, чем можно было бы ожидать при обслуживании простого старого статического файла, потому что Adobe Reader пытается быть хитрым, хотя эти PDF-файлы не оптимизированы.
Если кто-то захочет воспроизвести ошибку, PDF-файл, для которого пользователи сообщили о проблемах, находится здесь: http://www.lightandmatter.com/sr/sr.pdf [Теперь может быть невозможно воспроизвести поведение, потому что я ' реализовали ответ Хокана Линдквиста.]
2 ответа
Чтобы выяснить, есть ли что-то, что вы можете сделать, чтобы улучшить это, я думаю, вы действительно захотите выяснить, с какой комбинацией (-ями) плагинов для браузера / просмотра PDF возникает эта проблема, и попытаться найти способ ее воспроизведения.
Chrome и Firefox упоминаются в вопросе, но, по крайней мере, Chrome поставляется со своим собственным средством просмотра PDF. Тем не менее, вполне возможно использовать плагин Acrobat Reader или аналогичный с любым из этих браузеров, так что просто зная, что браузер действительно не отвечает, какое программное обеспечение использовалось.
С другой стороны, если цель состоит в том, чтобы пользователи просто загружали файлы, и вы не хотите разбираться со странностями различных плагинов, вы можете подумать, чтобы браузер не открывал файл, а просто загружал его.
Это будет сделано путем установки Content-Disposition: attachment
в ответе HTTP.
Конечно, в зависимости от того, как ваши пользователи работают с этими файлами, это также может привести к путанице, но я думаю, что ваш браузер сохранит файл, а затем откроет его локально, и он будет менее подвержен ошибкам.
Если вы можете повторить это, посмотрите на статус загрузки, заголовки запросов и ответов, это даст вам подсказку.
**Response Headers**
Accept-Ranges bytes
Connection Keep-Alive
Content-Length 9531692
Content-Range bytes 11278-9542969/9542970
Content-Type application/pdf
Date Tue, 24 Jun 2014 21:08:45 GMT
Etag "1b78005-919d3a-4f550c11dff40"
Keep-Alive timeout=15, max=100
Last-Modified Mon, 24 Mar 2014 02:11:33 GMT
Server Apache/2.2.16 (Debian)
**Request Headers**
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
Host www.lightandmatter.com
If-Range "1b78005-919d3a-4f550c11dff40"
Range bytes=11278-
User-Agent Mozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
Статус загрузки - 206 Частичное содержимое. По определению это означает, что "Клиент" сделал этот запрос, а не наоборот.
Таким образом, клиент запрашивает, в этом случае bytes = 11278-, заголовки ответа подтверждают, что он принимает диапазоны принятия.
Есть одна вещь, которая меня смущает, это то, что после цифры 8 стоит гипс.
Первоначально опубликовано здесь, но возможное (не проверенное) решение заключается в добавлении следующего в файл htaccess.
# Disable Byte-range for PDF files
<Files *.pdf>
Header set Accept-Ranges none
</Files>