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

标签 apache google-chrome aem dispatcher

我们在尝试在 AEM Dispatcher 上缓存视频时遇到问题。我们在 Apache 2.2 http 服务器上运行 dispatcher 4.1.2。

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

这是我目前所知道的全部,我怀疑由于 chrome/firefox 的部分请求,调度程序没有缓存视频。

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

最佳答案

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

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

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

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

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

关于apache - 在 Apache 服务器上运行的 AEM Dispatcher 上缓存视频返回 206,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31645892/

相关文章:

javascript - 为什么谷歌浏览器总是在选定文本后添加空格?

node.js - 从 Node.js 输出到 Chrome 控制台

java - AEM 6.1 Sightly Java 类不会在构建时更新

extjs - CQ5 在页面加载时打开对话框

php - Windows 8.1 升级后 Apache 不工作

Apache 8.5 拒绝编码的 url

javascript - 不允许窗口将顶层框架导航导航到数据 URL

java - Adobe CQ5 - 从外部数据库填充下拉列表

php - MySQL 不能与 php 一起工作;并在启用时使 apache 崩溃

php - 如何在运行 CLI 和 Apache2Handler 时将系统环境变量导入 PHP?