У меня есть сайт, на котором запущен apache, основная цель которого - обслуживать большие (10-30 Мб) pdf-файлы. Я довольно часто получаю электронные письма от пользователей, в которых говорится, что у них проблемы с загрузкой файлов:
«начнется загрузка, но загрузка не завершится, она зависает примерно на 25%».
«Кажется, страница находит, но просто крутится и крутится ... Я отпустил ее 5 мин. Нет данных. ОДНАКО: когда я выбрал« скачать », я получил ее за секунды».
«Каким-то образом он начинает загружать pdf примерно на 10% как в Chrome, так и в Firefox».
Поскольку я не могу воспроизвести проблемы, и они, кажется, не возникают у подавляющего большинства пользователей, очень сложно понять, в чем дело. Предположительно, пользователи каким-то образом неправильно сконфигурировали свои браузеры или плагины, или, может быть, в некоторых случаях это проблема с удобством использования их браузера или плагина. Заставлять пользователей сообщать о конкретных сообщениях об ошибках или поведении, описывать свою конфигурацию и т. Д. - все равно что рвать зубы.
Я видел несколько других вопросов, описывающих похожие проблемы, но они кажутся специфичными для 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>