Html 如何让浏览器缓存来自Azure CDN的视频响应?

Html 如何让浏览器缓存来自Azure CDN的视频响应?,html,caching,video,azure,browser-cache,Html,Caching,Video,Azure,Browser Cache,我已将mp4视频动画上载到Azure Blob存储。除了将内容类型设置为video/mp4之外,这些标题都是默认的。该视频可在以下位置访问: 我有一个Azure CDN在那个blob存储帐户上。通过CDN的同一视频的URL为 当我通过网页上的HTML5视频元素访问blob存储的视频时,浏览器(已在FF和Chrome中测试)以200 HTTP响应接收整个视频。对该视频的进一步请求然后从blob存储器接收304响应 但是,当您通过Azure CDN请求视频时,它会将其作为一系列HTTP 206部分响

我已将mp4视频动画上载到Azure Blob存储。除了将内容类型设置为video/mp4之外,这些标题都是默认的。该视频可在以下位置访问:

我有一个Azure CDN在那个blob存储帐户上。通过CDN的同一视频的URL为

当我通过网页上的HTML5视频元素访问blob存储的视频时,浏览器(已在FF和Chrome中测试)以200 HTTP响应接收整个视频。对该视频的进一步请求然后从blob存储器接收304响应

但是,当您通过Azure CDN请求视频时,它会将其作为一系列HTTP 206部分响应返回给您。这是对浏览器在请求中指定范围标头的响应

然而,通过CDN对视频的进一步请求不被缓存,并且整个视频由浏览器重新下载(通过一系列进一步的206个请求)

如何确保缓存视频?我理解部分回复的有用性,但在我们的例子中,视频是不可查找的,我们只能在下载整个文件时播放。我可以在这里看到一些方法,但到目前为止没有一种方法起到作用:

  • 禁止Azure CDN返回部分响应
  • 以某种方式从原始浏览器请求中删除范围标头
  • 说服浏览器缓存部分响应

  • 我曾尝试向文件中添加最大年龄缓存控制头,但没有效果。理想情况下,我们甚至不会在重新加载视频时点击Azure(因为它永远不会改变),但如果Azure随后返回304,我很乐意接受HTTP请求的成本。

    缓存206个响应很棘手。客户端的RFC要求为了缓存内容,ETAG和请求的范围必须完全匹配

    有几件事你可以查一下- 1) 验证ETag未根据请求更改。从您对环境的描述(以及设置内容过期日期)来看,这听起来不太可能,但可能是一种追求的途径

    2) 更有可能的是,范围请求没有排队。对于字节范围为1000-->2000的请求和第二个字节范围为1500-->2000的请求(每个RFC)将不会从客户端缓存中提供服务。因此,您可能正处于这样一种情况,即看到特定格式/客户机应该发生什么


    我非常确定HTML5只支持渐进式下载,因此除非您想重新考虑交付,否则这可能是预期的行为。

    +1发布一个有趣的azure问题:)FWIW,我想补充一点,在使用它报告的工具检查mp4 url头时:
    ETag头的语法无效并且不符合其指定的语法
    似乎无论我做什么,我都无法让Firefox、Edge或Chrome在本地缓存任何206个响应(尚未尝试IE)。ETAG和range请求都完美地排列在一起,但是响应永远不会被缓存。互联网上有这样的例子吗?我的直觉似乎告诉我,浏览器根本不支持这一点。