Я попал на несколько страниц в Google, где вы можете установить заголовок в S3 для отдельных объектов. Это действительно не продуктивный способ сделать это специально, поскольку в моем случае речь идет о нескольких объектах.
Ну, «продуктивно» или нет, именно так оно и рассчитано на работу.
CloudFront не добавляет Cache-Control:
заголовки.
CloudFront проходит сквозной (а также отношения, если иной не сконфигурировано) в Cache-Control:
заголовках , предоставляемого сервер происхождения, который в данном случае является S3.
Чтобы получить Cache-Control:
заголовки, предоставляемые S3 при извлечении объекта, они должны быть предоставлены при загрузке объекта в S3 или добавлены к метаданным объекта с помощью последующей операции put + copy, которая может использоваться для внутреннего копирования объекта в себя в S3, изменение метаданных в процессе. Это то, что делает консоль, за кулисами, если вы редактируете метаданные объекта.
В S3 также нет (на случай, если вам интересно) глобальных настроек, заставляющих все объекты в корзине возвращать эти заголовки - это атрибут для каждого объекта.
Обновление: Lambda @ Edge - это новая функция в CloudFront, которая позволяет запускать триггеры для запросов и / или ответов, между средством просмотра и кешем и / или кешем и источником, запуская код, написанный в Node.js, для простой структуры объекта запроса / ответа. выставлено CloudFront.
Одним из основных приложений для этой функции является манипулирование заголовками ... так что, хотя вышеприведенное все еще является точным - само CloudFront не добавляет Cache-Control
- теперь у функции Lambda есть возможность добавлять их к ответу, который возвращается из CloudFront.
Этот пример добавляет, Cache-Control: public, max-age=86400
только если Cache-Control
в ответе уже нет заголовка.
Использование этого кода в триггере ответа источника вызовет его запуск каждый раз, когда CloudFront извлекает объект из источника, и изменяет ответ до его кэширования CloudFront.
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
if(!response.headers['cache-control'])
{
response.headers['cache-control'] = [{
key: 'Cache-Control',
value: 'public, max-age=86400'
}];
}
callback(null, response);
};
Обновление (2018-06-20): Недавно я отправил запрос на добавление в команду CloudFront, чтобы разрешить настройку статических заголовков ответа источника в качестве атрибутов источника, аналогично тому, как можно добавлять статические заголовки запроса , теперь ... но с скручивание, позволяющее настраивать каждый заголовок для добавления условно (только если источник не предоставил этот заголовок в ответе) или безоговорочно (добавление заголовка и перезапись заголовка из источника, если таковой имеется).
С запросами функций вы обычно не получаете никакого подтверждения того, рассматривают ли они на самом деле реализацию новой функции ... или даже могут ли они уже работать над ней ... это просто объявляется, когда они будут готовы. Итак, я понятия не имею, будут ли они реализованы. Необходимо привести аргумент, что, поскольку эта возможность уже доступна через Lambda @ Edge, в базовой функциональности она не требуется ... но мой контраргумент состоит в том, что базовая функциональность не является полной функциональности без возможности выполните простую статическую манипуляцию заголовком ответа, и если это единственная причина, по которой необходим триггер, то требование лямбда-триггеров - это ненужные затраты в финансовом отношении и с дополнительной задержкой (даже при том, что ни один из них не обязательно является непомерной стоимостью).