Acabo de comenzar a almacenar imágenes cargadas por el usuario en el S3 de Amazon. Es bastante agradable porque solucionó mi problema de almacenamiento. Sin embargo, estoy luchando cuando se trata de tener el navegador en caché de las imágenes.cómo obtener un 304 para imágenes almacenadas en amazon s3 al usar django-storage en la aplicación django?
Estoy usando django-storages. En sus documentos, especifican que puede colocar cosas en el encabezado de solicitud de una imagen configurando la varilla AWS_HEADER en su configuración. Estoy haciendo eso y no obtengo ningún resultado.
Básicamente cuando la aplicación solicita la imagen (s), obtengo un 200 CADA VEZ. ARG ... cuando llevo el navegador directamente a la imagen (copie y pegue el enlace en una nueva ventana) obtengo un 200 y luego un 304 cada vez después de eso.
Es muy frustrante porque siempre descarga la imagen. Algunas páginas tienen hasta 25 miniaturas pequeñas y está volviendo a descargar todo cada vez que se vuelve a cargar la página.
Estoy sirviendo mis archivos estáticos usando djangos staticfiles y están funcionando correctamente. Obtengo un 200, luego 304 después de que el archivo se almacena en caché.
aquí están mis ajustes de AWS en settings.py
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = '***'
AWS_SECRET_ACCESS_KEY = '***'
AWS_STORAGE_BUCKET_NAME = 'foobar_uploads'
AWS_HEADERS = {
'Expires': 'Thu, 15 Apr 2020 20:00:00 GMT',
'Cache-Control': 'max-age=86400',
}
AWS_CALLING_FORMAT = CallingFormat.SUBDOMAIN
aquí están las cabeceras de petición y respuesta para cuando la aplicación solicita la imagen: (i he reemplazado lo que siento que podría ser información sensible con '* ')
##request##
GET /user_uploads/*****/2012/3/17/14/46/thumb_a_28_DSC_0472.jpg?Signature=FVR6T%2BXFwHMmdQ9K3n7Ppp7QxoY%3D&Expires=1332023525&AWSAccessKeyId=***** HTTP/1.1
Host: *****_user_uploads_sandbox.s3.amazonaws.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Accept: */*
Referer: http://localhost:8000/m/my-photos/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
##response##
HTTP/1.1 200 OK
x-amz-id-2: Hn3S+3gmeLHIjKCpz+2ocE6aPsLCVHh56jJYTsPHwxU98y89x+9X1Ml202evBUHT
x-amz-request-id: 528CEB880CA89AD3
Date: Sat, 17 Mar 2012 21:32:06 GMT
Cache-Control: max-age=86400
Expires: Thu, 15 Apr 2020 20:00:00 GMT
Last-Modified: Sat, 17 Mar 2012 20:46:29 GMT
ETag: "a3bc70e0c3fc0deb974edf95668e9030"
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 8608
Server: AmazonS3
aquí están las cabeceras de petición/respuesta para cuando solicite la imagen de copia y pegar manualmente enlace a la imagen:
##request##
GET /user_uploads/*****/2012/3/17/14/46/thumb_a_28_DSC_0472.jpg?Signature=FVR6T%2BXFwHMmdQ9K3n7Ppp7QxoY%3D&Expires=1332023525&AWSAccessKeyId=***** HTTP/1.1
Host: porlio_user_uploads_sandbox.s3.amazonaws.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
If-None-Match: "a3bc70e0c3fc0deb974edf95668e9030"
If-Modified-Since: Sat, 17 Mar 2012 20:46:29 GMT
##response##
HTTP/1.1 304 Not Modified
x-amz-id-2: FZH0imrbNxziMznhl5zAoo38CaM7Z+TFnd8R6HtTYB3eTmVpCih+1IniKaliRo18
x-amz-request-id: 3CACF77FBB39D088
Date: Sat, 17 Mar 2012 21:33:22 GMT
Last-Modified: Sat, 17 Mar 2012 20:46:29 GMT
ETag: "a3bc70e0c3fc0deb974edf95668e9030"
Server: AmazonS3
Veo que hay algunas diferencias como "If-None-Match:" o "If-Modified-Since:". Creo que si tuviera que establecerlos, debería funcionar como me gustaría.
¿Hay una manera fácil de hacer esto?
¡Gracias por cualquier ayuda!
EDIT 1: He leído este artículo y no pude traducir muy bien .. http://coder.cl/2012/01/django-and-amazon-s3/comment-page-1/
¡Muchas gracias! ¡He estado peleando con esto para siempre! Trabajé en mi primer intento. ¡Guau, soy una campista feliz! – teewuane