如何启用字节范围请求?

pra*_*aji 6 php podcast php5 itunes apache-2.2

如何启用字节范围请求?在 iTunes 上进行播客时,它会给出错误消息“您的提要存在问题。您的剧集托管在不支持字节范围请求的服务器上。启用字节范围请求并再次尝试提交。”。
请给我一个启用字节范围请求的方法

sym*_*ean 6

Apache 对静态内容开箱即用。如果内容是由 PHP 生成的,那么您需要相应地修改 PHP 代码。

据说http_send_file () 和http_send_data () 函数处理范围请求 - 但我不确定这在实践中意味着什么 - 需要一些实验。


Dav*_*win 6

Apache 支持开箱即用的字节范围请求 - 假设没有明确禁用它来解决此 DoS 错误 ( http://httpd.apache.org/security/CVE-2011-3192 )。

您可以使用如下的简单内容进行测试(在 PHP 中):

<?php
$range = '60-120';
$host = "my.domain.name";
$socket = fsockopen($host,80);
$packet = "GET /path/to/static/file.xml HTTP/1.1\r\nHost: $host\r\nRange:bytes=$range\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
fwrite($socket,$packet);
echo fread($socket,2048);
Run Code Online (Sandbox Code Playgroud)

运行上面的代码,应该会产生如下结果:

HTTP/1.1 206 Partial Content
Date: Tue, 10 Jul 2012 11:17:55 GMT
Server: Apache
Last-Modified: Tue, 10 Jul 2012 10:12:23 GMT
Accept-Ranges: bytes
Content-Length: 61
Content-Range: bytes 60-120/6433
Connection: close
Content-Type: text/xml

tp://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
<ch
Run Code Online (Sandbox Code Playgroud)

如果上述方法不起作用,则可能有人关闭了 Range 标头 - 请参阅上面的 URL,了解在 .htaccess 文件或全局 Apache 配置中查找内容的建议。