Odpowiedzi:
Obecnie nie jest to możliwe, zobacz https://forums.aws.amazon.com/thread.jspa?threadID=162252, aby uzyskać dyskusję na ten temat.
Edycja: Lambda @ Edge umożliwiło to, patrz poniżej.
Aktualizacja tego ...
Nagłówki odpowiedzi HTTP można teraz dostosowywać za pomocą funkcji Lambda @ edge. Dokumentacja znajduje się na stronie http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html . Aby tego spróbować, utwórz nową funkcję lambda w konsoli AWS. Wybierz „Edge Nodge.js 4.3” jako język i poszukaj szablonu nagłówka cloudfront-modyfikuj-odpowiedź-odpowiedź. Jeśli to zrobisz, Lambda zapyta Cię, do której dystrybucji CloudFront i zdarzenia chcesz zastosować tę funkcję. Pamiętaj, że możesz to zmienić lub zmienić w dowolnym momencie, przechodząc do karty Zachowanie w Cloudfront.
Oto przykładowa funkcja lambda ...
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers['Strict-Transport-Security'] = 'max-age=2592000; includeSubDomains';
callback(null, response);
};
Aby dodać do odpowiedzi Andrew:
Właśnie wypróbowałem to i kilka notatek: Nie ma już specyficznego środowiska uruchomieniowego nodejs, ale lambda musi zostać utworzona w regionie N Wirginii i uruchomiona przez chmurową odpowiedź źródłową lub odpowiedź widza .
Kod po wyjęciu z pudełka już nie działa. Daje ERR_CONTENT_DECODING_FAILED.
Rozwiązaniem jest użycie składni json w następujący sposób:
response.headers['Strict-Transport-Security'] = [ { key: 'Strict-Transport-Security', value: "max-age=31536000; includeSubdomains; preload" } ];
response.headers['X-Content-Type-Options'] = [ { key: 'X-Content-Type-Options', value: "nosniff" } ];
Poprawnie, ponieważ Lambda @ Edge jest ogólnie dostępna, ograniczyli ją do N Wirginii i należy wybrać Węzeł 6.10 zamiast Węzła 4.3.
Odpowiednia część naszego kodu poniżej (dla naszego celu będzie to zawsze stałe przekierowanie 302):
'use strict';
exports.handler = (event, context, callback) => {
var request = event.Records[0].cf.request;
const response = {
status: '302',
statusDescription: '302 Found',
httpVersion: request.httpVersion,
headers: {
Location: [
{
"key":"Location",
"value":"someURL"
}
],
'Strict-Transport-Security': [
{
"key":"Strict-Transport-Security",
"value":'max-age=63072000; includeSubDomains; preload'
}
],
},
};
callback(null, response);
};
Konfigurując różne zachowania na CloudFront, możesz ograniczyć liczbę żądań wywołujących funkcję Lambda.