2012-03-19 2 views
8

Scénario:navigateur (Chrome) ne cache actifs de CloudFront

je installer un distribuition CloudFront d'origine personnalisée (mon serveur) à flux progressif d'une liste de fichiers vidéo MP4.

Ces fichiers sont mis en boucle et lus via l'API vidéo HTML5 native de Chrome. Chaque fois que la vidéo se termine, Chrome fait une autre demande au fichier.

Lors de la lecture du fichier de mon serveur, retourne Chrome

Status Code:206 Partial Content (from cache) 

sur chaque demande, alors que lors de la lecture du même fichier à partir CloudFront, met en cache Chrome jamais le fichier et conserve le télécharger à chaque demande!

Ce sont les en-têtes de réponse d'Amazon CloudFront dans 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 

têtes de réponse en chrome du même fichier de mon serveur (origine):

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 

Est-ce que je manque quelque chose?

Peut-être la raison en est l'absence de l'en-tête Keep-Alive de la réponse CloudFront? ou peut-être dans la version différente du protocole HTTP (1.0 vs 1.1)?

MISE À JOUR:

J'ai aussi ajouté têtes Expires et Cache-contrôles, rien n'a changé. Cela rend tristement inutiledangereux combinant API vidéo HTML5 et Amazon CloudFront.

Une capture d'écran de l'Inspecteur, que vous pouvez voir le fichier est téléchargé à nouveau sur chaque boucle: http://i.imgur.com/0VyZD.jpg

Ceci est une autre capture d'écran avec le fichier chargé à partir du serveur local: http://i.imgur.com/go1zN.jpg

MISE À JOUR 2:

Cela semble ne pas être strictement lié à CloudFront. Après plusieurs tests, il semble Chrome ne cache pas la vidéo si

1) le fichier est plus grand que 2Mb 2) L'en-tête Content-Range ne démarre pas à 0 (voir exemple ci-dessus differents)

Et je pense Il ne concerne que l'API vidéo HTML5 native et son état de contenu partiel 206.

Répondre

8

De votre réponse CloudFront:

HTTP/1.0 206 Contenu partiel

HTTP/1.0 ne contient pas un code de réponse 206 (qui a été ajouté dans HTTP/1.1) si le cache de chrome couche refuse de réutiliser la réponse. Plus de détails spécifiques au chrome dans http://crbug.com/128116 mais la réponse courte est que CloudFront devrait servir 206 réponses comme HTTP/1.1, pas /1.0.

+0

FTR, signalé à AWS CF dans https://forums.aws.amazon.com/thread.jspa?threadID=96247 – Ami

+2

Existe-t-il une solution de contournement côté client pour cela? Je déteste la façon dont toutes mes vidéos ne seront pas mises en cache. –

+0

Voir aussi: https://forums.aws.amazon.com/thread.jspa?threadID=124998 –

2

Il n'y a pas d'en-tête expires/cache-control spécifié. Chrome peut être très particulier sur la mise en cache des éléments (en particulier lorsqu'ils sont ajoutés dynamiquement au DOM via javascript) s'il n'y a pas d'en-tête d'expiration fourni.

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

de google:

Il est important de spécifier l'une des Expires ou Cache-Control max-age, et l'un des derniers-Modified ou ETag, pour toutes les ressources cacheable. Il est redondant de spécifier à la fois Expires et Cache-Control: max-age, ou de spécifier à la fois Last-Modified et ETag.

+0

Merci, je vais ajouter un en-tête Expires et essayer. Cependant, je n'arrive toujours pas à comprendre pourquoi Chrome met en cache le fichier de mon serveur et non de Cloudfront. – achairapart

+0

Les autres éléments autour du fichier sont-ils les mêmes lorsqu'ils sont servis à la fois sur le serveur local et sur Amazon? peut-être que l'heuristique de mise en cache évalue ce qu'il faut faire différemment pour ce fichier en fonction du contenu voisin qui lui est associé. – javram

+0

Expires les en-têtes ajoutés, rien n'a changé. D'autres objets ont le même comportement. Je suppose que c'est quelque chose avec l'état de contenu partiel 206. J'ai également ajouté une capture d'écran de l'inspecteur de Chrome. – achairapart

Questions connexes