Браузер отправляет 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);
}