2012-01-18 28 views
13

E 'possibile avere intestazioni personalizzate su Amazon S3 con nomi arbitrari?Intestazioni personalizzate su Amazon S3

Per esempio, sto usando una punta CDN di Amazon S3 come il server di origine, e al fine di consentire funzionalità avanzate sulla CDN ho bisogno di usare un header personalizzato "x-qualcosa-qualcosa" ...

Vedo che è possibile farlo con "x-amz-meta- (qualcosa)" ma che dire di qualcosa di più generale come "x- (qualcosa) - (qualcosa)" senza l'amz?

Amazon S3 custom headers

+0

Cosa non si può ottenere con le intestazioni prefissate in questo modo? – Kekoa

risposta

11

Non credo sia possibile con il loro current API. Coprono le principali intestazioni necessarie per la cache e l'interoperabilità tra browser.

Penso che siano sicuri nel consentire solo intestazioni personalizzate con prefisso x-amz-meta-, possibilmente per evitare di scontrarsi con le intestazioni selezionate dall'utente quando aggiornano la propria API in futuro.

Se sono necessari attributi personalizzati associati agli oggetti, è consigliabile analizzare lo x-amz-meta- nell'applicazione client.

+5

"Trivial" se controlli l'applicazione client ... ma se è di terze parti, non è così banale! – Jeff

+1

@Jeff Suppongo che se non accedete direttamente ad AWS siete vincolati alle limitazioni di qualsiasi cosa stiate usando. – Kekoa

+0

Grazie, mi chiedevo perché non potevo impostare intestazioni personalizzate per conto mio. Il 'x-amz-meta-'prefix lo ha fatto davvero (un fatto scarsamente documentato da Amazon). – Frederic

5

questo bellissimo articolo spiega tutto https://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2

TLDR:

non riuscite a-do soltanto con S3. È necessario utilizzare Cloudfront e lambda tramite Lambda @ Edge. È un'integrazione tra Lambda e CloudFront. Ti consente di eseguire Lambdas all'interno di CloudFront. Questo ti permette di cambiare le intestazioni tra le altre cose. Quindi, se stai accettando l'accesso al tuo s3 tramite CloudFront, questa potrebbe essere una valida opzione.

0

Sono stato in grado di ottenere questo utilizzando il s3cmd tool. Ho scritto uno script di sincronizzazione che sincronizza il mio sito statico utilizzando il parametro --cache-control sullo strumento client AWS e poi manualmente lo ripristina e aggiunge un paio di altre intestazioni per un paio di file specifici:

cd/appropriatedirectory

# Eliminare sito attuale
AWS s3 s3 rm: // yourbucket --recursive --exclude 'logs/*'

# Carica nuovo sito, l'impostazione di intestazione cache per 1 mese per tutti i file
AWS s3 sincronizzazione. s3: // yourbucket --exclude '.idea/*' --exclude '.git/*' --exclude '.gitignore' --cache-control max-age = 2592000

# Sovrascrive le intestazioni della cache per alcuni file
python/pathToS3cmd/s3cmd modify --add-header = "Cache-Control: no-cache, no-store, must-revalidate" s3: //yourbucket/somefile.html
python/pathToS3cmd/s3cmd/s3cmd modify --add-header = "Scade: 0" s3: //yourbucket/somefile.html
python/pathToS3cmd/s3cmd/s3cmd modify --add-header = "Pragma: no-cache" s3: // yourbucket /somefile.html

+0

Questo ha qualche cosa in sé per ignorare i log, i file IntelliJ e Git. L'ho lasciato come un utile esempio di un pratico script di sincronizzazione. –