Php 当IE9发出请求时,如何阻止X-Sendfile提供完整的视频文件?

Php 当IE9发出请求时,如何阻止X-Sendfile提供完整的视频文件?,php,apache,x-sendfile,Php,Apache,X Sendfile,我遇到了一个问题,即无论预加载属性设置如何,当IE9请求一个视频,并且该视频由x-sendfile提供时,该请求被列为挂起并保持连接打开 因此,如果您有10个视频试图加载,IE9将很快耗尽其所有可用连接,浏览器将无法发出进一步的请求 当告诉IE9从Apache请求相同的视频时,不使用X-Sendfile,Apache将文件的一小部分作为200请求。然后,当按下播放按钮以提供一系列文件时,浏览器会发出请求 看起来X-Sendfile让Apache最初为整个文件提供服务,而不是只为其中的一部分提供服

我遇到了一个问题,即无论预加载属性设置如何,当IE9请求一个视频,并且该视频由x-sendfile提供时,该请求被列为挂起并保持连接打开

因此,如果您有10个视频试图加载,IE9将很快耗尽其所有可用连接,浏览器将无法发出进一步的请求

当告诉IE9从Apache请求相同的视频时,不使用X-Sendfile,Apache将文件的一小部分作为200请求。然后,当按下播放按钮以提供一系列文件时,浏览器会发出请求

看起来X-Sendfile让Apache最初为整个文件提供服务,而不是只为其中的一部分提供服务

如何通过Apache函数使X-Sendfile请求与对Apache的常规请求相同?

设置“接受范围”标题,如
标题(“接受范围:字节”)
告诉IE9在默认情况下尝试流式传输文件,而不是在一个块中提供文件

建议在设置之前检查HTTP请求是否为1.1版,因为1.0不支持标头

if (isset($_SERVER['SERVER_PROTOCOL']) && $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1') {
    header("Accept-Ranges: bytes");
}

我在任何地方都找不到关于此的任何文档,因此我将在此处发布我的解决方案。

设置Accept Ranges标头不会导致X-Sendfile执行任何操作。它告诉客户端您支持
Range:bytes
请求。@hobbs捕捉得不错!看来我得出了正确的解决方案,却得出了错误的结论!我要修改我的答案。