У меня есть сайт рабочий апач, основная цель которого в жизни состоит в том, чтобы подать большие файлы PDF (на 10-30 Мбит). Я получаю электронные письма справедливо часто от пользователей, говорящих, что у них есть проблемы при загрузке файлов:
"начнет загружать, но загрузка не завершается, замораживается приблизительно в 25%".
"Это, кажется, находит страницу, но просто вращается и вращается... Я позволяю ему пойти 5 минут Никакие данные. ОДНАКО: Когда я выбрал "загрузку", я получил ее в секундах".
"Это так или иначе начинает загружать PDF приблизительно в 10%, и в Chrome и в Firefox".
Так как я не могу воспроизвести проблемы, и они, кажется, не происходят для подавляющего большинства пользователей, очень трудно выяснить то, что произошло. По-видимому, пользователи неправильно сконфигурировали свои браузеры или плагины так или иначе, или возможно в некоторых случаях это - проблема удобства использования с их браузером или плагином. Заставляя пользователей сообщить об определенных сообщениях об ошибках или поведении, опишите их конфигурацию, и т.д., похож на получение по запросу зубов.
Я видел некоторые другие вопросы, которые описывают подобные проблемы, но они кажутся характерными для IIS, тогда как я выполняю апача:
Эта ошибка, кажется, не соответствует (неопределенным) отчетам, которые я получил:
Есть ли какие-либо методы для bulletproofing моя установка так, чтобы пользователи не испытывали столь многие из этих проблем? Определение браузера в JavaScript с соответствующим сообщением? Предупреждение пользователей против конкретных комбинаций браузера/плагина или автоматически обнаружение тех комбинаций? Прямо сейчас я не могу даже сказать, на какие строки посмотреть в моем апачском файле журнала, чтобы видеть, зарегистрирована ли какая-либо ошибка на стороне сервера. Возможно все это становится более сложным, чем Вы ожидали бы для того, чтобы подать простой статический файл, потому что Adobe Reader пытается быть хитрым - хотя эти PDFs не оптимизированы.
Если кто-либо хотел бы попытаться воспроизвести ошибку, PDF, для которого пользователи сообщили о проблемах, здесь: http://www.lightandmatter.com/sr/sr.pdf [Может теперь быть невозможно воспроизвести поведение, потому что я реализовал ответ Håkan Lindqvist.]
Чтобы выяснить, можно ли что-нибудь улучшить, я думаю, что вы действительно захотите узнать, с какой комбинацией плагинов браузера/просмотрщика 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-, заголовки ответа подтверждают, что он получает Accept-Ranges.
Есть одна вещь, которая меня смущает, это то, что после цифры 8 есть заголовок гипса.
Первоначально размещенный здесь, но возможное (непроверенное) решение - добавить в файл htaccess следующее.
# Disable Byte-range for PDF files
<Files *.pdf>
Header set Accept-Ranges none
</Files>