2012-01-18 33 views
13

¿Es posible tener encabezados personalizados en Amazon S3 con nombres arbitrarios?Encabezados personalizados en Amazon S3

Por ejemplo, estoy usando un puntero que CDN a Amazon S3 como el servidor de origen, y con el fin de habilitar la funcionalidad avanzada en el CDN necesito utilizar un encabezado personalizado "X-algo-algo" ...

Veo que es posible hacer esto con "x-amz-meta- (algo)" pero ¿qué pasa con algo más general como "x- (algo) - (algo)" sin el amz?

Amazon S3 custom headers

+0

¿Qué no se puede lograr con los encabezados con el prefijo de esa manera? – Kekoa

Respuesta

11

No creo que es posible con su current API. Cubren los principales encabezados que necesitará para el almacenamiento en caché y la interoperabilidad del navegador.

Creo que están a salvo al permitir x-amz-meta- encabezados personalizados prefijados, posiblemente para evitar chocar con los encabezados seleccionados por el usuario cuando actualizan su API en el futuro.

Si necesita atributos personalizados adjuntos a sus objetos, debe ser trivial analizar el x-amz-meta- en su aplicación cliente.

+5

"Trivial" si controla la aplicación cliente ... pero si se trata de un tercero, ¡no es tan trivial! – Jeff

+1

@Jeff Supongo que si no accede directamente a AWS, está en deuda con las limitaciones de lo que sea que esté usando. – Kekoa

+0

Gracias, me preguntaba por qué no podía establecer encabezados personalizados por mi cuenta. El prefijo 'x-amz-meta-' lo hizo de hecho (un hecho pobremente documentado por Amazon). – Frederic

5

Este bello artículo explica todo https://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2

tldr:

Usted no puede-ver sólo con S3. Debe usar Cloudfront y lambda a través del Lambda @ Edge. Es una integración entre Lambda y CloudFront. Le permite ejecutar Lambdas dentro de CloudFront. Esto le permite cambiar encabezados, entre otras cosas. Entonces, si estás bien accediendo a tu s3 a través de CloudFront, esta podría ser una opción viable.

0

Pude lograr esto usando el s3cmd tool. Escribí un guión de sincronización que sincroniza mi sitio estático utilizando el parámetro --cache-control en la herramienta de cliente de AWS y luego manualmente restablece y agrega un par de otras cabeceras durante unos archivos específicos:

cd/appropriatedirectory

# eliminar sitio actual
AWS S3 S3 rm: // yourbucket --recursive --exclude 'logs/*'

# Subir nuevo sitio, configuración del encabezado del caché de 1 mes para todos los archivos
AWS S3 sincronización. s3: // yourbucket --exclude '.idea/*' --exclude '.git/*' --exclude '.gitignore' --cache-control max-age = 2592000

# Reemplaza los encabezados de la caché por algún archivo
python/pathToS3cmd/s3cmd modify --add-header = "Control de caché: no-cache, no-store, must-revalidate" s3: //yourbucket/somefile.html
python/pathToS3cmd/s3cmd/s3cmd modify --add-header = "Expira: 0" s3: //yourbucket/somefile.html
python/pathToS3cmd/s3cmd/s3cmd modify --add-header = "Pragma: no-cache" s3: // yourbucket /somefile.html

+0

Esto tiene algo de cruzado para ignorar los registros, los archivos IntelliJ y Git. Lo dejé como un ejemplo útil de una secuencia de comandos de sincronización práctica. –