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

Caching Videos Returning 206 on AEM Dispatcher running on Apache server

我们在尝试在 AEM Dispatcher 上缓存视频时遇到问题。我们是 Apache 2.2 http 服务器上的 运行 调度程序 4.1.2。

视频服务正常并且在所有浏览器上都可以运行,但是从 Chrome/Firefox 观看时它们没有被缓存,但是从 IE 观看时它们被正确缓存。我们在浏览器之间看到的区别是,当用户在 IE 上打开视频时,它首先完全加载完整视频,然后开始播放,因此返回 200 作为响应代码。 chrome/firefox 播放视频时,它使用范围请求,浏览器在多个范围请求中加载完整视频,返回 206 作为响应代码。

到目前为止我只知道这些,我怀疑由于 chrome/firefox 提出的部分请求,调度程序不会缓存视频。

任何解决此问题的建议都非常有帮助!

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

基于浏览器行为的视频缓存工作: Dispatcher 用于缓存 images/pages/videos 等项目,并且在某些情况下 Dispatcher 会缓存它所服务的内容,其中之一是 – Response Code 应该是 200。现在当视频在不同的浏览器中播放时,它使用不同的方法来播放视频。

当使用Chrome和Firefox播放视频时,它使用部分内容策略来加载和播放视频,即它向服务器发送请求以仅获取视频的一部分以快速开始播放它并且在这种情况下,它会发送一个范围 header 以及请求 returns 状态代码为 206 的视频的一部分(部分内容成功)。因此,要播放视频,浏览器(Chrome 和 Firefox)会发出多个范围请求,每个请求 returns 一个 206 状态代码并且有一部分视频,因此视频不会被缓存通过这些浏览器访问时。浏览器本身设法通过组合这些部分来播放整个视频。

现在对于 IE,行为略有不同。它不是发出部分范围请求,而是先请求下载完整视频,只有在下载整个视频后,它才会开始播放视频。所以在这种情况下,服务器 returns 状态码为 200 的视频文件,调度程序认为它是可缓存的,因此缓存了视频。因此,当视频将被 IE 浏览器播放时,由于这种行为,它会被缓存。

可能的解决方案: 因此,根据上面解释的行为,使用 Chrome/Firefox 播放的视频不会缓存在调度程序上,而使用 IE 播放的相同视频将被缓存。现在,如果我们仍然想要制作视频缓存,无论播放它的浏览器如何,我们都必须通过实现一段称为缓存预热脚本的特殊代码来模拟 IE 请求加载视频的行为。该脚本不会改变浏览器行为。该脚本将在作者激活视频后立即触发,这将触发该视频的调度程序刷新事件,我们将捕获此事件并触发我们的脚本。此脚本将请求下载具有与 IE 使用的相同 headers 的完整视频,即这反过来会自动在调度程序上缓存视频。所以我们所做的只是在视频发布后立即进行缓存,而不是等到通过浏览器播放时才进行缓存。