缓存视频在Apache服务器上运行的AEM Dispatcher上返回206

wn9m85ua  于 2023-06-06  发布在  Apache
关注(0)|答案(1)|浏览(235)

尝试在AEM Dispatcher上缓存视频时遇到问题。我们在Apache 2.2 HTTP服务器上运行Dispatcher 4.1.2。
视频正在正常提供,并在所有浏览器上运行,但从Chrome/Firefox查看时不会缓存,但从IE查看时会正确缓存。我们看到的浏览器之间的区别是,当用户在IE上打开视频时,它首先完全加载完整的视频,然后开始播放,因此返回200作为响应代码。当chrome/firefox播放视频时,它使用范围请求,完整的视频由浏览器在多个范围请求中加载,返回206作为响应代码。
这是我到目前为止所知道的一切,我怀疑由于chrome/firefox的部分请求,调度程序没有缓存视频。
任何解决这个问题的建议都将非常有帮助!

2fjabf4q

2fjabf4q1#

然而,我们个人跳过了在调度器上缓存视频,因为我们现在使用CDN来缓存视频,但如果有人对在调度器上缓存视频感兴趣,这里是我尚未实现的建议解决方案,但理论上应该可以工作。

**视频缓存基于浏览器行为:**Dispatcher用于缓存图片/页面/视频等项目。并且存在某些条件,在这些条件下,调度器高速缓存它所服务的内容,其中之一是响应代码应该是200。现在,当视频在不同的浏览器中播放时,它使用不同的方法来播放视频。

当使用Chrome和Firefox播放视频时,它使用部分内容策略来加载和播放视频,即它向服务器发送请求以仅获得视频的一部分以快速开始播放它,并且在这种情况下,它发送具有该请求的范围报头,该请求返回具有状态码206(部分内容成功)的视频的一部分。因此,要播放视频,浏览器(Chrome和Firefox)会发出多个范围请求,每个请求都会返回一个206状态码,并包含视频的一部分,因此当通过这些浏览器访问时,视频不会被缓存。浏览器本身通过组合这些部分来播放整个视频。
现在在IE的情况下,行为有点不同。它不是进行部分范围请求,而是首先请求下载整个视频,并且仅在整个视频被下载之后,它才开始播放视频。因此在这种情况下,服务器返回状态码为200的视频文件,调度程序将其视为可缓存的,因此缓存视频。因此,当视频将由IE浏览器播放时,由于此行为,它将被缓存。

**可能的解决方案:**因此,基于上述行为,使用Chrome/Firefox播放的视频不会缓存在Dispatcher上,而使用IE播放的相同视频会缓存。现在,如果我们仍然想使视频缓存,不管它在哪个浏览器中播放,我们必须通过实现一段特殊的代码来模拟IE请求加载视频的行为,称为缓存预热脚本。此脚本不会更改浏览器行为。这个脚本将在一个视频从author激活后被触发,这将触发该视频的dispatcher flush事件,我们将捕获这个事件并触发我们的脚本。此脚本将请求下载完整的视频,其标题与IE使用的标题相同,即其又将自动地在调度器上高速缓存视频。因此,我们所做的就是在视频发布后立即进行视频缓存,而不是在通过浏览器播放时等待视频缓存。

相关问题