ach*_*art 8 apache google-chrome amazon-cloudfront
场景:
我设置了从自定义源(我的服务器)到渐进式流的mpfront视频文件列表的Cloudfront分发.
这些文件通过Chrome原生HTML5视频API循环播放.每次视频结束时Chrome都会向该文件发出另一个请求.
从我的服务器播放文件时,Chrome会返回
Status Code:206 Partial Content (from cache)
Run Code Online (Sandbox Code Playgroud)
在每个请求上,当从CloudFront播放相同的文件时,Chrome从不缓存该文件并在每次请求时继续下载它!
这些是Chrome中Amazon CloudFront的响应标头:
HTTP/1.0 206 Partial Content
Date: Mon, 19 Mar 2012 19:47:44 GMT
Server: Apache
Last-Modified: Mon, 19 Mar 2012 12:35:37 GMT
ETag: "a78e87ba-335d8e-4bb97cb9f887f"
Accept-Ranges: bytes
Content-Type: video/mp4
Content-Range: bytes 4228-3366285/3366286
Content-Length: 3362058
Age: 3819
X-Cache: Hit from cloudfront
X-Amz-Cf-Id: xxxxxx
Via: 1.0 xxxxxx.cloudfront.net (CloudFront)
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
Chrome中与我的服务器(来源)相同的文件中的响应标头:
HTTP/1.1 206 Partial Content
Date: Mon, 19 Mar 2012 20:50:40 GMT
Server: Apache
Last-Modified: Mon, 19 Mar 2012 12:35:37 GMT
ETag: "a78e87ba-335d8e-4bb97cb9f887f"
Accept-Ranges: bytes
Content-Length: 3366286
Content-Range: bytes 0-3366285/3366286
Keep-Alive: timeout=2, max=256
Connection: Keep-Alive
Content-Type: video/mp4
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
也许原因是缺少Keep-Alive
来自CloudFront响应的标题?或者可能在不同的HTTP协议版本(1.0 vs 1.1)?
更新:
我还添加了Expires和Cache-Controls标头,没有任何改变.这让人很遗憾无用 将HTML5视频API和Amazon CloudFront结合起来很危险.
来自Inspector的屏幕截图,您可以看到该文件在每个循环中重新下载:http: //i.imgur.com/0VyZD.jpg
这是从本地服务器加载的文件的另一个屏幕截图:http: //i.imgur.com/go1zN.jpg
更新2:
这似乎并不严格与CloudFront相关.经过各种测试后,Chrome似乎无法缓存视频
1)文件大于2Mb 2)Content-Range
标头不从0开始(参见上面的不同示例)
我认为它只与原生HTML5视频API及其206部分内容状态有关.
小智 9
来自您的CloudFront响应:
HTTP/1.0 206部分内容
HTTP/1.0不包含206响应代码(在HTTP/1.1中添加),因此chrome的缓存层拒绝重用响应.http://crbug.com/128116中更多特定于chrome的详细信息,但简短的回答是CloudFront应该将206个响应作为HTTP/1.1而不是/1.0提供.
归档时间: |
|
查看次数: |
5433 次 |
最近记录: |