我已将mp4视频动画上传到Azure Blob存储。除了将Content-Type设置为video / mp4之外,标题都是默认的。可以在http://paddingtondev.blob.core.windows.net/media/1001/animation_default_headers.mp4
访问该视频我有一个Azure CDN坐在该blob存储帐户上。通过CDN的同一视频的网址为http://az593791.vo.msecnd.net/media/1001/animation_default_headers.mp4
当我通过网页上的HTML5视频元素访问blob存储的视频时,浏览器(已在FF和Chrome中测试过)以200 HTTP响应接收整个视频。对该视频的进一步请求然后从blob存储接收304响应。
但是,当您通过Azure CDN请求视频时,它会将其作为一系列HTTP 206部分响应返回给您。这是为了响应浏览器使用请求指定Range标头。
但是,不会缓存通过CDN对视频的进一步请求,并且浏览器会重新下载整个视频(通过一系列206个请求)。
如何确保视频缓存?我理解部分响应的有用性,但在我们的情况下,视频不会被搜索,我们只在下载整个文件时播放它。我可以在这里看到一些方法,但迄今为止没有一个方法有所帮助:
我尝试在文件中添加max-age Cache-Control标头,但这没有任何影响。理想情况下,我们在重新加载视频时根本不会点击Azure(因为它永远不会改变),但是如果它随后返回304,我很乐意接受对Azure的HTTP请求的成本。
答案 0 :(得分:1)
缓存206响应很棘手。客户端的RFC要求为了缓存内容,ETAG和请求的范围必须完全匹配。
您可以查看几件事 - 1)确认ETAGS没有根据请求进行更改。从您的环境描述(以及设置内容过期日期)来看,这听起来不太可能,但它可能是一种追求的途径。
2)更可能是范围请求没有排队。对于字节范围1000 - > 2000的请求以及1500的第二个请求 - > 2000将不会(根据RFC)从客户端缓存提供。因此,您可能会看到该特定格式/客户端应该发生的确切情况。
我非常确定HTML5仅支持渐进式下载,因此除非您想重新考虑此次传递,否则这可能是预期的行为。