2012-03-19 3 views
8
에서 캐시되지 자산을하지

시나리오 :브라우저 (크롬) CloudFront를

I 설치 진보적 스트림에 사용자 정의 원점에서 CloudFront를의 distribuition (내 서버) MP4 비디오 파일의 목록을 표시합니다.

이러한 파일은 Chrome 기본 HTML5 동영상 API를 통해 반복 재생됩니다. 동영상이 끝날 때마다 Chrome에서 파일을 다시 요청합니다. 내 서버에서 파일을 재생할 때

은, 크롬 CloudFront를에서 같은 파일을 재생할 때 동안

Status Code:206 Partial Content (from cache) 
각 요청에

는, 크롬은 결코 파일을 캐시하지 반환하고 각각의 요청에 그것을 계속 다운로드!

이 아마존 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 

응답 헤더 내 서버에서 (원산지) :

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 

내가 뭔가를 놓치고 있습니까?

이유는 CloudFront 응답의 Keep-Alive 헤더가 없기 때문일 수 있습니다. 또는 다른 HTTP 프로토콜 버전 (1.0 대 1.1)에있을 수 있습니까?

업데이트 : 나는 또한 추가

가 만료 및 캐시 컨트롤 헤더는, 아무것도 변경되지 않습니다. 슬프게도 꽤 귀엽다. 쓸데없는위험한 HTML5 비디오 API와 Amazon CloudFront를 결합한 것.

검사기에서 스크린 샷, 파일이 각 루프에 다시 다운로드되어 볼 수 있습니다 : http://i.imgur.com/go1zN.jpg

UPDATE : 이것은 로컬 서버에서로드 파일 또 다른 스크린 샷은 http://i.imgur.com/0VyZD.jpg

2 :

이것은 클라우드 프런트와 관련이없는 것 같습니다. 각종 시험 후에는 Content-Range 헤더 (0에서 시작 위의 differents의 예 참조)

를 내가 생각하지 않습니다

1) 파일의 2Mb 2)보다 큰 경우 크롬 비디오를 캐시하지 않는 것 같다 네이티브 HTML5 동영상 API 및 206 부분 콘텐츠 상태와 만 관련이 있습니다.

답변

8

:

HTTP/1.0 206 일부 내용

HTTP/1.0 206 응답 코드 (즉,이/HTTP 1.1을 추가했다) 그래서 크롬의 캐시를 포함하지 않는 계층은 응답을 재사용하지 않습니다. http://crbug.com/128116에 크롬 관련 세부 정보가 있지만 짧은 대답은 CloudFront가 /1.0이 아닌 HTTP/1.1로 206 응답을 제공해야한다는 것입니다.

+0

FTR, https://forums.aws.amazon.com/thread.jspa?threadID=96247 – Ami

+2

의 AWS CF에보고했습니다. 이에 대한 클라이언트 측 해결책이 있습니까? 내 모든 동영상이 캐시되지 않는 방법을 싫어. –

+0

참고 사항 : https://forums.aws.amazon.com/thread.jspa?threadID=124998 –

2

만료/캐시 제어 헤더가 지정되지 않았습니다. 만료 헤더가 제공되지 않으면 Chrome은 항목 캐싱 (특히 javascript를 통해 DOM에 동적으로 추가되는 경우)에 특히 중요 할 수 있습니다.구글에서

http://code.google.com/speed/page-speed/docs/caching.html

:

중 하나를 지정하는 것이 중요하다 만료 또는 캐시 제어 최대 사용 기간 및 캐시 가능한 모든 자원에 대한-마지막으로 수정 또는의 ETag 중 하나. Expires와 Cache-Control : max-age를 모두 지정하거나 Last-Modified와 ETag를 모두 지정하는 것은 불필요합니다. 당신의 CloudFront를 응답에서

+0

감사합니다. Expires 헤더를 추가하고 시도해 보겠습니다. 그러나 Chrome이 클라우드 프론트가 아닌 내 서버의 파일을 캐시하는 이유는 여전히 이해할 수 없습니다. – achairapart

+0

로컬 서버와 Amazon에서 서비스 할 때 파일 주위의 다른 항목이 동일합니까? 어쩌면 캐싱 휴리스틱 스는 파일에 포함 된 인접한 컨텐츠를 기반으로 해당 파일에 대해 다르게 수행 할 작업을 평가할 것입니다. – javram

+0

만료 헤더가 추가되었지만 아무 것도 변경되지 않았습니다. 다른 객체도 동일한 동작을합니다. 나는 이것이 206 부분 콘텐츠 상태를 가진 어떤 것으로 의심된다. 또한 Chrome Inspector에서 스크린 샷을 추가했습니다. – achairapart

관련 문제