浏览器发送带有 RANGE 的 http 请求

浏览器发送带有 RANGE 的 http 请求

我在 Fedora 虚拟机中有一个本地测试环境。奇怪的是,资源(css 和 js 文件)似乎不起作用。查看 Firebug,我看到浏览器发送带有“Range bytes=0-”的 HTTP 请求。服务器响应为空的 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 的“共享文件夹”功能提供(可能相关吗?)。

没有错误日志可以帮助我。

答案1

这表示您的服务器接受来自客户端的 Range: 标头,使用字节格式。Range 用于“渐进式下载”,也称为“恢复下载”。例如,当您在 Firefox 中使用 HTTP(不是 FTP)下载文件时,点击“暂停”然后“恢复”,Firefox 将向服务器发送 HTTP GET 并在请求中添加 Range: 标头。该标头的值将向服务器指示在哪个字节偏移处开始数据流。

根据HTTP 1.1 标头字段定义 RFC。这意味着客户端仍将尝试发送 Range: 标头,但如果服务器不支持此类请求,它将忽略它。因此,我会禁用它,因为它只会给您的服务器增加不必要的带宽使用量。

答案2

运行 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);
}

相关内容