Назад | Перейти на главную страницу

Пуленепробиваемая загрузка больших PDF-файлов от неправильной конфигурации браузера?

У меня есть сайт, на котором запущен apache, основная цель которого - обслуживать большие (10-30 Мб) pdf-файлы. Я довольно часто получаю электронные письма от пользователей, в которых говорится, что у них проблемы с загрузкой файлов:

Поскольку я не могу воспроизвести проблемы, и они, кажется, не возникают у подавляющего большинства пользователей, очень сложно понять, в чем дело. Предположительно, пользователи каким-то образом неправильно сконфигурировали свои браузеры или плагины, или, может быть, в некоторых случаях это проблема с удобством использования их браузера или плагина. Заставлять пользователей сообщать о конкретных сообщениях об ошибках или поведении, описывать свою конфигурацию и т. Д. - все равно что рвать зубы.

Я видел несколько других вопросов, описывающих похожие проблемы, но они кажутся специфичными для IIS, тогда как я использую apache:

Эта ошибка не соответствует полученным мною (расплывчатым) отчетам:

Существуют ли какие-либо методы защиты моей системы от пуль, чтобы пользователи не сталкивались со многими из этих проблем? Обнаружение браузера в javascript с соответствующим сообщением? Предупреждать пользователей о конкретных комбинациях браузера / плагина или автоматически обнаруживать эти комбинации? Прямо сейчас я даже не могу сказать, какие строки нужно посмотреть в моем файле журнала apache, чтобы узнать, записана ли какая-либо ошибка на стороне сервера. Возможно, все это станет более сложным, чем вы ожидаете при обслуживании простого старого статического файла, потому что Adobe Reader пытается быть хитрым - хотя эти PDF-файлы не оптимизированы.

Если кто-то хочет попытаться воспроизвести ошибку, PDF-файл, для которого пользователи сообщили о проблемах, находится здесь: http://www.lightandmatter.com/sr/sr.pdf [Возможно, теперь невозможно воспроизвести поведение, потому что я реализовал ответ Хокана Линдквиста.]

Чтобы выяснить, есть ли что-нибудь, что вы можете сделать, чтобы улучшить это, я думаю, вам действительно захочется выяснить, с какой комбинацией плагинов браузера / программы просмотра 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 частичное содержимое. По определению это означает, что «Клиент» сделал этот запрос, а не наоборот.

Итак, клиент запрашивает, в данном случае байтов = 11278- , заголовки ответа подтверждают, что он получает Принять-диапазоны.

Есть одна вещь, которая меня смущает, это то, что после цифры 8 есть лишнее.

Первоначально опубликовано Вот, но возможное (непроверенное) решение - добавить следующее в файл htaccess.

# Disable Byte-range for PDF files
<Files *.pdf>
    Header set Accept-Ranges none 
</Files>