Браузер отправляет http запрос с RANGE

У меня есть локальная среда тестирования в виртуальной машине Fedora. Как ни странно, ресурсы (файлы CSS и JS), похоже, не работают. Глядя на Firebug, я вижу, что браузер отправляет HTTP-запрос с "Range bytes=0-". Сервер отвечает либо пустым 200OK, либо пустым 206 Partial Content.

Вот пример:

Response Headers
Date    Mon, 23 Nov 2009 23:33:26 GMT
Server  Apache/2.2.13 (Fedora)
Last-Modified   Thu, 19 Nov 2009 22:58:55 GMT
Etag    "18-3aec-478c14dbee138"
Accept-Ranges   bytes
Content-Length  15084
Content-Range   bytes 0-15083/15084
Connection  close
Content-Type    text/css

Request Headers
Host    fedora.test
User-Agent  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5) Gecko/20091105 Fedora/3.5.5-1.fc11 Firefox/3.5.5
Accept  text/css,*/*;q=0.1
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  300
Connection  keep-alive
Referer http://fedora.test/pictures/
Cookie  __utma=26341546.1613992749.1258504422.1258569125.1258752550.4; __utmz=26341546.1258504422.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=tqf8jfmc77qihe97rl4tmhq685
Range   bytes=0-
If-Range    "18-3aec-478c14dbee138"

Я не знаю, отправляет ли браузер неправильный запрос или это делает сервер. Запросы, сделанные извне (например, Google Analytics), работают нормально.

Это работает в Fedora 11 в VirtualBox. Apache. PHP. Файлы обслуживаются с помощью функции "Общие папки" VirtualBox (это может быть связано?).

Никакие журналы ошибок не могли помочь мне.

2 ответа

Это означает, что ваш сервер принимает заголовок Range: от клиента, используя формат байтов. Диапазон используется для "Прогрессивной загрузки", также называемой "Возобновление загрузки". Например, когда вы загружаете файл в Firefox, используя HTTP (не FTP), нажимаете "Пауза", а затем "Возобновить", Firefox отправляет HTTP-запрос GET на сервер и добавляет в запрос заголовок Range:. Значение этого заголовка будет указывать серверу, с какого байтового смещения начинать поток данных.

Этот заголовок является необязательным в соответствии с RFC определения полей заголовка HTTP 1.1. Это означает, что клиенты по-прежнему будут пытаться отправить заголовок Range:, но сервер просто проигнорирует его, если он не поддерживает такие запросы. Поэтому я бы отключил его, потому что он просто добавляет ненужное использование полосы пропускания на ваш сервер.

Есть ли вероятность, что учетная запись, используемая для запуска apache / php, не имеет доступа для чтения файлов из "общих папок"? Из вашего описания это звучит так, как будто у PHP нет проблем, только статические файлы (так apache тогда?) ... может быть, попытаться создать оболочку PHP для их потоковой передачи?

if ($fp = fopen ($file_path, "r")) {
    while(!feof($fp)) {
        $file_buffer = fread($fp, 2048);
        echo $file_buffer;
    }
    fclose($fp);
} else {
    die('LOGGED! bad file '.$file_path);
}
Другие вопросы по тегам