Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 浏览器(Chrome)不缓存CloudFront中的资产_Apache_Google Chrome_Amazon Cloudfront - Fatal编程技术网

Apache 浏览器(Chrome)不缓存CloudFront中的资产

Apache 浏览器(Chrome)不缓存CloudFront中的资产,apache,google-chrome,amazon-cloudfront,Apache,Google Chrome,Amazon Cloudfront,情景: 我从自定义源(我的服务器)设置了一个Cloudfront发行版,以逐行传输mp4视频文件列表 这些文件通过Chrome原生HTML5视频api循环播放。每次视频结束时,Chrome都会对文件发出另一个请求 从我的服务器播放文件时,Chrome会返回 Status Code:206 Partial Content (from cache) 在每次请求时,当从CloudFront播放同一文件时,Chrome从不缓存该文件,并在每次请求时不断下载它 以下是Chrome中Amazon Clou

情景:

我从自定义源(我的服务器)设置了一个Cloudfront发行版,以逐行传输mp4视频文件列表

这些文件通过Chrome原生HTML5视频api循环播放。每次视频结束时,Chrome都会对文件发出另一个请求

从我的服务器播放文件时,Chrome会返回

Status Code:206 Partial Content (from cache)
在每次请求时,当从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 
Chrome中来自我的服务器(源)的同一文件的响应头:

我错过什么了吗


可能是因为CloudFront响应中缺少
保持活动
头?或者可能在不同的HTTP协议版本(1.0与1.1)中?

没有指定expires/cache control标头。如果没有提供expires头,Chrome在缓存项(特别是通过javascript将它们动态添加到DOM中时)方面会非常特别

来自谷歌:


必须为所有可缓存资源指定Expires或Cache Control max age中的一个,以及Last Modified或ETag中的一个。指定Expires和Cache Control:max age是多余的,或者指定Last Modified和ETag

从您的CloudFront响应中:

HTTP/1.0 206部分内容


HTTP/1.0不包含206响应代码(在HTTP/1.1中添加),因此chrome的缓存层拒绝重用响应。更多与chrome相关的详细信息,但简短的回答是CloudFront应该以HTTP/1.1而不是/1.0的形式提供206个响应。

当从本地服务器和Amazon提供服务时,文件中的其他项目是否相同?可能缓存启发式算法是基于文件中包含的相邻内容来评估该文件的不同处理方式。FTR在中报告给AWS CF是否有任何客户端解决方案?我讨厌我的所有视频都无法缓存。另请参见:
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