我在 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);
}