2012-01-18 3 views
13

Возможно ли иметь пользовательские заголовки на Amazon S3 с произвольными именами?Пользовательские заголовки на Amazon S3

Например, я использую, указывающую CDN на Amazon S3 в качестве сервера происхождения, а также для того, чтобы обеспечить расширенную функциональность на CDN, мне нужно использовать пользовательский заголовок «X-то с чем-то» ...

Я вижу, что это можно сделать с помощью «x-amz-meta- (что-то)», но как насчет чего-то более общего типа «x- (что-то) - (что-то)» без amz?

Amazon S3 custom headers

+0

Что вы не можете сделать с заголовками, префиксными таким образом? – Kekoa

ответ

11

Я не думаю, что это возможно с их current API. Они охватывают основные заголовки, которые вам понадобятся для кеширования и взаимодействия с браузером.

Я думаю, что они безопасны только с предустановленными заголовками x-amz-meta-, возможно, чтобы не допустить столкновения с выбранными пользователем заголовками, когда они обновят свои api в будущем.

Если вам нужны пользовательские атрибуты, прикрепленные к вашим объектам, должно быть тривиально разбирать x-amz-meta- в клиентском приложении.

+5

«Trivial», если вы управляете клиентским приложением ... но если это какая-то третья сторона, это не так уж и тривиально! – Jeff

+1

@Jeff Я полагаю, что если вы не получаете доступа к AWS прямо, вы обязаны ограничить все, что вы используете. – Kekoa

+0

Спасибо, мне было интересно, почему я не мог самостоятельно настраивать собственные заголовки. «X-amz-meta -prefix сделал это действительно (факт, плохо документированный Amazon). – Frederic

5

Эта красивая статья объясняет все https://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2

tldr:

Вы не сможешь делать только с s3. Вам необходимо использовать Cloudfront и лямбда через Lambda @ Edge. Это интеграция между Lambda и CloudFront. Он позволяет запускать Lambdas в CloudFront. Это позволяет вам менять заголовки между прочим. Поэтому, если вы хорошо обращаетесь к своему s3 через CloudFront, это может быть жизнеспособным вариантом.

0

Я смог достичь этого, используя s3cmd tool. Я написал синхронизацию скрипта, который синхронизирует мой статический сайт, используя параметр --cache-control на инструменте клиента AWS, а затем вручную сбрасывает его и добавляет несколько других заголовки для нескольких конкретных файлов:

кд/appropriatedirectory

# Удалить текущий сайт
AWS s3 гт s3: // yourbucket --recursive --exclude 'журналы/*'

# Загрузить новый сайт, настройки заголовка кэша 1 месяц для всех файлов
AWS s3 синхронизации. s3: // yourbucket --exclude '.idea/*' --exclude '.git/*' --exclude '.gitignore' --cache-control max-age = 2592000

# Переопределяет заголовки кеша для некоторый файл
python/pathToS3cmd/s3cmd изменить --add-header = "Cache-Control: no-cache, no-store, must-revalidate" s3: //yourbucket/somefile.html
python/pathToS3cmd/s3cmd/s3cmd изменить --add-header = "Истекает: 0" s3: //yourbucket/somefile.html
python/pathToS3cmd/s3cmd/s3cmd изменить --add-header = "Pragma: no-cache" s3: // yourbucket /somefile.html

+0

У этого есть некоторые трещины в нем для игнорирования журналов, IntelliJ и Git файлов. Я оставил его в качестве надежного примера практического скрипта синхронизации. –

Смежные вопросы