Znalazłem kilka stron w Google, w których możesz ustawić nagłówek w S3 dla poszczególnych obiektów. To naprawdę nie jest produktywny sposób, aby to zrobić specjalnie, ponieważ w moim przypadku mówimy o kilku przedmiotach.
Cóż, „produktywne” czy nie, tak właśnie jest zaprojektowane.
CloudFront nie dodaje Cache-Control:
nagłówków.
CloudFront przechodzi, przez (a także względem, o ile inaczej skonfigurowane) w Cache-Control:
nagłówkowe serwera pochodzenia, która w tym przypadku jest S3.
Aby uzyskać Cache-Control:
nagłówki dostarczone przez S3 podczas pobierania obiektu, należy je podać, gdy obiekt zostanie przesłany do S3 lub dodany do metadanych obiektu przez kolejną operację umieszczania i kopiowania, której można użyć do wewnętrznego skopiowania obiektu do siebie w S3, modyfikując metadane w procesie. To właśnie robi konsola poza sceną, jeśli edytujesz metadane obiektu.
Nie ma też (na wypadek, gdybyś się zastanawiał) żadnego globalnego ustawienia w S3, które zmusiłoby wszystkie obiekty w wiadrze do zwrócenia tych nagłówków - jest to atrybut na obiekt.
Aktualizacja: Lambda @ Edge to nowa funkcja w CloudFront, która pozwala uruchamiać wyzwalacze dla żądań i / lub odpowiedzi, między przeglądarką a pamięcią podręczną i / lub pamięcią podręczną i źródłem, uruchamiając kod napisany w Node.js w stosunku do prostej struktury obiektu żądania / odpowiedzi narażone przez CloudFront.
Jedną z głównych aplikacji dla tej funkcji jest manipulowanie nagłówkami ... więc chociaż powyższe jest nadal dokładne - sam CloudFront nie dodaje Cache-Control
- możliwe jest teraz, aby funkcja Lambda dodała je do odpowiedzi zwróconej z CloudFront.
Ten przykład dodaje Cache-Control: public, max-age=86400
tylko wtedy, gdy Cache-Control
nagłówek nie zawiera już odpowiedzi.
Użycie tego kodu w wyzwalaczu Origin Response spowoduje, że będzie on uruchamiany za każdym razem, gdy CloudFront pobierze obiekt od źródła, i zmodyfikuje odpowiedź, zanim CloudFront go buforuje.
'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);
};
Aktualizacja (2018-06-20): Niedawno wysłałem żądanie funkcji do zespołu CloudFront, aby umożliwić konfigurację statycznych nagłówków odpowiedzi na pochodzenie jako atrybutów pochodzenia, podobnie jak w przypadku dodawania statycznych nagłówków żądania , teraz ... ale z twist, umożliwiając skonfigurowanie dodawania każdego nagłówka warunkowo (tylko jeśli źródło nie podało tego nagłówka w odpowiedzi) lub bezwarunkowo (dodając nagłówek i nadpisując nagłówek z tego miejsca, jeśli jest obecny).
W przypadku żądań funkcji zazwyczaj nie otrzymujesz żadnego potwierdzenia, czy rozważają wdrożenie nowej funkcji ... lub nawet czy już nad nią pracowali ... jest to po prostu ogłaszane, kiedy skończą. Nie mam więc pojęcia, czy zostaną one wdrożone. Trzeba wysunąć argument, że ponieważ ta funkcja jest już dostępna za pośrednictwem Lambda @ Edge, nie ma takiej potrzeby w podstawowej funkcjonalności ... ale moim argumentem jest to, że podstawa funkcjonalnie nie jest kompletna bez funkcji wykonuj proste, statyczne operacje na nagłówkach odpowiedzi, i jeśli jest to jedyny powód, dla którego potrzebny jest wyzwalacz, to wymaganie wyzwalaczy Lambda jest niepotrzebnym kosztem, finansowym i dodatkowym opóźnieniem (chociaż nie jest to koniecznie koszt dziwaczny).