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

Веб-браузеры не показывают прогресс загрузки при загрузке с моего сервера Apache

Safari / Firefox / Chrome показывают только неопределенный индикатор выполнения при загрузке больших файлов, хотя заголовок длины содержимого установлен. Есть идеи, почему это могло быть? Это стандартная (-ish) установка Apache 2.2.

bash# curl -I http://nodebox.net/download/nodebox2/nodebox-2.0.0.960-setup.exe
HTTP/1.1 200 OK
Date: Mon, 14 Dec 2009 13:35:04 GMT
Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_wsgi/2.3 mod_perl/2.0.2 Perl/v5.8.8
Last-Modified: Mon, 14 Dec 2009 11:54:22 GMT
ETag: "11acd74-1e7c1de-ef263780"
Accept-Ranges: bytes
Content-Length: 31965662
Vary: Accept-Encoding
Content-Type: application/x-msdos-program

Что вы имеете в виду под «промежуточным индикатором выполнения»? - в окошке загрузок он вообще не отображается или просто не показывает прогресс. Для какого размера файла отображается, а не для файла? На какой скорости вы подключаетесь к этому серверу с машины, с которой вы тестируете?

Может случиться так, что вы просто не видите прогресса для файлов меньшего размера, потому что они исчезают так быстро, что у вас никогда не будет времени для отображения. Это может иметь место, даже если загрузка не происходит мгновенно, поскольку процесс - это больше, чем просто «получить содержимое» - это:

  1. запросить объект (обычно это занимает очень мало времени, немного дольше для HTTP, но может занять больше времени, если сервер или ваша ссылка заняты)
  2. дождитесь появления первой информации (это может занять некоторое время, если это результат сценария и / или вы используете mod_gzip или аналогичный, поскольку в этих случаях процесс на веб-сервере может ждать, пока не будет завершен весь сценарий перед отправкой даже первого байта данных)
  3. передавать данные - для небольших файлов это может быть визуально мгновенно на быстрой ссылке (индикатор выполнения может не отображаться до тех пор, пока не прибудет первый байт, а последний байт может прибыть через доли секунды после этого), поэтому индикатор выполнения есть и ушел быстрее, чем ты видишь
  4. jigger-pokery после загрузки (проверка AV и т. д.), что может занять некоторое время в зависимости от ваших настроек

Только на шаге 3 вы ожидаете увидеть индикатор выполнения, который может составлять лишь часть времени загрузки быстрой ссылки. Некоторые прокси-устройства могут усугубить это, поскольку они могут буферизовать более крупный файл, который занимает несколько секунд (или десятков секунд, или больше) для передачи по вашему внешнему сетевому соединению, так что клиентское приложение видит, что запрос уходит, ждет первого байта ответа (в течение которого прокси фактически получает файл) и получает все это за доли секунды за один раз от прокси (так что шаг 3 выше, с его точки зрения, практически мгновенен).

Все вышеперечисленное является довольно общим - вам нужно добавить некоторые детали и анализ к вашему вопросу, чтобы получить более конкретный ответ.