Как установить поле заголовка Tk "Не отслеживать" (DNT) и условный TSV для ответов HTTP в Amazon Cloudfront?
Документ W3C TPE определяет заголовок TK следующим образом: "Поле заголовка ответа Tk - это средство для указания статуса отслеживания, который применен к соответствующему запросу. Сервер источника ОБЯЗАН отправлять поле заголовка Tk, если его статус отслеживания в масштабе всего сайта значение равно? (динамическое) или G (шлюз), или когда интерактивное изменение статуса отслеживания выполняется с помощью U (обновлено). https://www.w3.org/TR/tracking-dnt/.
Мой вопрос заключается в том, как установить пользовательские заголовки http DNT на Amazon Cloudfront. Мой ответ покажет, что это можно сделать с помощью функции Lambda@edge.
1 ответ
Amazon Cloudfront поддерживает лямбда-функции.
- Войдите в консоль управления AWS и откройте консоль AWS Lambda.
- Создать новую лямбда-функцию
- Выберите "Edge Nodge.js 4.3" для языка
- Выберите шаблон заголовка cloudfront-modify-response-header.
- Укажите ваш дистрибутив CloudFront и событие, к которому будет применяться функция.
Пример кода для поля заголовка Tk для ресурса, который утверждает, что не отслеживает:
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers['Tk'] = 'N';
callback(null, response);
};
Пример кода для поля заголовка Tk для ресурса, который утверждает, что отслеживает с согласия:
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers['Tk'] = 'C';
callback(null, response);
};
Пример кода для условного значения статуса отслеживания (TSV):
'use strict';
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const response = event.Records[0].cf.response;
if (request.headers['DNT'] = '0') {
response.headers['Tk'] = 'T';
} else {
response.headers['Tk'] = 'N';
}
callback(null, response);
};
PS: ответ основан на (1) HSTS на Amazon CloudFront от источника S3, https://serverfault.com/questions/820939/hsts-on-amazon-cloudfront-from-s3-origin и (2) AWS Lambda@Edge (превью) http://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html. Смотрите также https://www.w3.org/TR/tracking-dnt/.