在IE11中伪造的HTTPstream

我有一些video,我需要能够find他们的各个点,而不必在那之前下载整个video。 到目前为止,我已经在Firefox和Chrome上使用带有NodeJS和vid-streamer模块的html5video标签,效果很好。 然而,IE 11坚持要下载整个video,直到下载到我想播放的点,我都无法跳过它。 IE是否支持部分内容,并有触发它的一些技巧? 或者是它已经要求与其他头(GetContentFeatures.DLNA.ORG ??)之一,我的服务器不明白?

示例firefox请求头 – 它发送一个新的请求,每当你寻求,关键作为范围头,它甚至发送初始请求(字节= 0-):

Accept video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5 Accept-Language en-us,en;q=0.5 Connection keep-alive Cookie connect.sid=... Host ... Range bytes=75661312- Referer ... User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 

和服务器响应:

 Accept-Ranges bytes Cache-Control public Connection keep-alive Content-Disposition inline; filename=video.webm; Content-Length 12509 Content-Range bytes 75661312-75673820/75673821 Content-Transfer-Encoding binary Content-Type video/webm Date Wed, 03 Sep 2014 21:42:08 GMT Last-Modified Thu, 28 Aug 2014 15:05:24 GMT Pragma public Server VidStreamer.js/0.1.4 Vary Accept-Encoding X-Powered-By Express status 206 Partial Content 

IE11不发送范围:

 Request GET /videos/video.mp4 HTTP/1.1 Accept */* If-Modified-Since Mon, 16 Nov 2009 14:05:45 GMT User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Referer ... GetContentFeatures.DLNA.ORG 1 Pragma getIfoFileURI.dlna.org Accept-Language en-US Accept-Encoding gzip, deflate Host ... Connection Keep-Alive Cookie ... 

而服务器(合理的,我认为)回应整个video和一个200 OK,而不是206部分内容:

 Response HTTP/1.1 200 OK X-Powered-By Express Vary Accept-Encoding Cache-Control public Connection keep-alive Content-Type video/mp4 Content-Disposition inline; filename=video.mp4; Pragma public Last-Modified Mon, 16 Nov 2009 14:05:45 GMT Content-Transfer-Encoding binary Content-Length 36373917 Server VidStreamer.js/0.1.4 Date Wed, 03 Sep 2014 21:38:42 GMT 

弄清楚了。 IE11确实支持伪stream,但是它希望在“Accept-Ranges:bytes”头之前,它会打扰请求一个范围,所以服务器需要响应,无论它实际上是否发送一个字节范围。 我不得不修改我的vid-streamer模块来做到这一点。

警告:我不知道哪些浏览器支持video标签,但不支持字节范围,所以我不能肯定地说,这不会破坏某个地方,但它似乎应该是好的…

我有同样的问题,直到经过一些testing,我发现从IE / Edge的初始请求不包括范围标题。 如果你相应地回应一个初始的文件大小的Content-Range等于你的Content-Length头部,IE会假设你只想一次发送整个文件。 如果你没有得到一个范围头,你最好select一些小于文件大小的内容长度。 我select了1Mb,但我认为并不重要。