Как установить поле заголовка 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 поддерживает лямбда-функции.

  1. Войдите в консоль управления AWS и откройте консоль AWS Lambda.
  2. Создать новую лямбда-функцию
  3. Выберите "Edge Nodge.js 4.3" для языка
  4. Выберите шаблон заголовка cloudfront-modify-response-header.
  5. Укажите ваш дистрибутив 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/.

Другие вопросы по тегам