2012-03-19 11 views
8

Escenario:navegador (Chrome) hace activos no caché de CloudFront

I fijó un distribuition Cloudfront de origen personalizado (mi servidor) a la corriente progresiva una lista de archivos de vídeo MP4.

Estos archivos se envían en bucle y se reproducen a través de la aplicación de video HTML5 nativa de Chrome. Cada vez que finaliza el video, Chrome realiza otra solicitud al archivo.

Al reproducir el archivo de mi servidor, Chrome vuelve

Status Code:206 Partial Content (from cache) 

en cada petición, mientras que cuando se reproduce el mismo archivo desde CloudFront, Chrome nunca se almacena en caché los archivos y mantiene descargándolo en cada petición!

Estas son las cabeceras de respuesta de Amazon CloudFront en 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 

encabezados de respuesta en Chrome del mismo archivo de mi servidor (origen):

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 

Me estoy perdiendo algo?

¿Quizás el motivo se deba a la falta del encabezado Keep-Alive de la respuesta de CloudFront? o tal vez en la versión del protocolo HTTP diferente (1.0 vs 1.1)?

ACTUALIZACIÓN:

También he añadido expira y Cache-Controles cabeceras, nada cambió. Esto tristemente hace que inútilpeligroso combinando api de video HTML5 y Amazon CloudFront.

Una captura de pantalla del inspector, como se puede ver el archivo se vuelve a descargar en cada bucle: http://i.imgur.com/0VyZD.jpg

Ésta es otra captura de pantalla con el archivo cargado desde el servidor local: http://i.imgur.com/go1zN.jpg

ACTUALIZACIÓN 2:

Parece que no está estrictamente relacionado con CloudFront. Después de varias pruebas, parece Chrome no almacena en caché el vídeo si

1) el archivo es más grande que 2Mb 2) La cabecera Content-Range no se inicia a 0 (véase el ejemplo differentes arriba)

Y creo solo está relacionado con la API de video HTML5 nativa y su 206 Estado de contenido parcial.

Respuesta

8

Desde su respuesta CloudFront:

HTTP/1.0 206 Contenido parcial

HTTP/1.0 no contiene un código de 206 respuesta (que se añadió en HTTP/1.1) para la caché del cromo la capa se niega a reutilizar la respuesta. Más detalles específicos de Chrome en http://crbug.com/128116 pero la respuesta corta es que CloudFront debe servir 206 respuestas como HTTP/1.1, no /1.0.

+0

FTR, reportado a AWS CF en https://forums.aws.amazon.com/thread.jspa?threadID=96247 – Ami

+2

¿Hay alguna solución del lado del cliente para esto? Odio cómo todos mis videos no se almacenarán en caché. –

+0

Vea también: https://forums.aws.amazon.com/thread.jspa?threadID=124998 –

2

No se ha especificado un encabezado de expiración/control de caché. Chrome puede ser muy particular sobre el almacenamiento en caché de elementos (especialmente cuando se agregan dinámicamente al DOM a través de javascript) si no se proporciona un encabezado caducado.

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

de Google:

Es importante especificar uno de Expira o Cache-Control max-age, y uno de Last-Modified o ETag, para todos los recursos cacheables. Es redundante especificar Caducidad y Control de caché: max-age, o para especificar Last-Modified y ETag.

+0

Gracias, voy a agregar un encabezado Expires e intentarlo. Sin embargo, todavía no puedo entender por qué Chrome guarda en caché el archivo de mi servidor y no de Cloudfront. – achairapart

+0

¿Los otros elementos del archivo son los mismos cuando se sirven desde el servidor local y desde Amazon? quizás la heurística de almacenamiento en caché evalúa qué hacer diferente para ese archivo en función del contenido vecino que se incluye con él. – javram

+0

Caduca los encabezados agregados, nada ha cambiado. Otros objetos tienen el mismo comportamiento. Sospecho que es algo con el 206 estado de contenido parcial. También agregué una captura de pantalla del Inspector de Chrome. – achairapart

Cuestiones relacionadas