PHP的readfile/fgets/fread会导致向服务器发送多个请求

4
我正在尝试通过使用PHP代理进行身份验证来通过Apache / Nginx流式传输MP4文件。我已经实现了字节范围以便在iOS上流式传输,如此处所述:http://mobiforge.com/developing/story/content-delivery-mobile-devices。这在Chrome和Safari中运行得非常好,但是……非常奇怪的是,如果我监视服务器对php页面的请求,则每个页面加载在浏览器中会发生三次请求。以下是Chrome检查器(直接进入PHP代理页面)的截图:

Chrome inspector

正如您所看到的,第一个请求被取消,第二个请求保持挂起状态,第三个请求正常工作。同样的,该文件可以在浏览器中播放。我尝试了其他方法来读取文件(例如readfile、fgets、fread等),但结果都一样。是什么导致了这三个请求?我如何得到一个有效的单一请求?
2个回答

2

第一个请求是为了预加载文件的第一个字节范围。浏览器在下载指定数量后取消该请求。

我不确定第二个请求是什么......

第三个请求是当您实际开始播放媒体文件时,它会请求并下载完整的文件。


哼。所以没有办法将请求减少到一个。有趣。谢谢你的信息。 - DeweyOx

1

不确定这是否回答了您的问题,但使用PHP提供大型二进制文件并不是正确的做法。

最好让PHP仅处理身份验证,并将文件引用传递给Web服务器进行服务,释放资源。

另请参阅:在PHP动态创建HTTP响应时缓存它们

它更详细地描述了我建议做的事情。


我对这种方法很感兴趣,但是你知道它是否适用于流式传输文件吗?也就是说,它是否支持HTTP_RANGE / HTTP/1.1 206部分内容,以便用户可以在内容中寻找特定点? - DeweyOx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接