2012-03-19 2 views
8

Сценарий:Browser (Chrome) не кэш активов от CloudFront

Я настроить CloudFront distribuition из пользовательского происхождения (мой сервер) потока в прогрессивный список mp4 видео файлов.

Эти файлы зацикливаются и воспроизводятся через родной HTML5 видеоролик HTML5. Каждый раз, когда видео заканчивается, Chrome делает другой запрос к файлу.

При воспроизведении файла с моего сервера, Chrome возвращает

Status Code:206 Partial Content (from cache) 

на каждом запросе, в то время как при воспроизведении одного файла из CloudFront, Chrome никогда не кэширует файл и сохраняет его загрузку при каждом запросе!

Эти заголовки ответа от Amazon CloudFront в Chrome:

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 

Response Headers в 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 

ли я что-то отсутствует?

Возможно, причина в отсутствии заголовка Keep-Alive от ответа CloudFront? или, возможно, в другой версии протокола HTTP (1.0 против 1.1)?

UPDATE:

Я также добавил Истекает и Cache-Controls заголовки, ничего не изменилось. Это печально делает довольно бесполезнымопасно сочетает HTML5 видео api и Amazon CloudFront.

Скриншот из инспектора, как вы можете увидеть файл повторно загружены на каждом цикле: http://i.imgur.com/0VyZD.jpg

Это еще один скриншот с загруженного файла с локального сервера: http://i.imgur.com/go1zN.jpg

UPDATE 2:

Это, похоже, не строго связано с CloudFront. После различных тестов, кажется, Chrome не кэшировать видео, если

1) файл не больше, чем 2Мб 2) Заголовок Content-Range не начинается с 0 (см дифферент пример выше)

И я думаю, это связано только с собственным API-интерфейсом HTML5 и его статусом частичного контента 206.

ответ

8

От вашего ответа CloudFront:

HTTP/1.0 206 Partial Content

HTTP/1.0 не содержит 206 код ответа (который был добавлен в HTTP/1.1) так кэш Хрома слой отказывается повторно использовать ответ. Более подробные сведения о хроме в http://crbug.com/128116, но короткий ответ заключается в том, что CloudFront должен обслуживать 206 ответов как HTTP/1.1, а не /1.0.

+0

FTR, сообщили AWS CF в https://forums.aws.amazon.com/thread.jspa?threadID=96247 – Ami

+2

Есть ли способ обхода на стороне клиента для этого? Ненавижу, как все мои видео не будут кэшироваться. –

+0

См. Также: https://forums.aws.amazon.com/thread.jspa?threadID=124998 –

2

Указанный заголовок/кеш-контроль отсутствует. Chrome может быть очень специфичен в отношении кеширования элементов (особенно, когда они динамически добавляются в DOM через javascript), если нет конечного заголовка.

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

от Google:

Важно указать один из Истекает или Cache-Control максимального возраста, и один из Last-Modified или ETag, для всех кэшируемых ресурсов. Недостаточно указать как Expires, так и Cache-Control: max-age, или указать как Last-Modified, так и ETag.

+0

Спасибо, я собираюсь добавить заголовок Expires и попробовать. Однако я все еще не понимаю, почему Chrome кэширует файл с моего сервера, а не с Cloudfront. – achairapart

+0

Являются ли другие элементы вокруг файла одинаковыми при обслуживании как с локального сервера, так и с Amazon? возможно, эвристика кэширования оценивает, что делать по-другому для этого файла на основе соседнего содержимого, включенного в него. – javram

+0

Истекает, добавлены заголовки, ничего не изменилось. Другие объекты имеют одинаковое поведение. Я подозреваю, что это что-то с частичным контентом 206. Я также добавил скриншот из Chrome Inspector. – achairapart