1

W3C TPE 文档将 TK 标头定义如下:“Tk 响应标头字段是一种用于指示应用于相应请求的跟踪状态的方法。如果源服务器的站点范围跟踪状态,则需要发送 Tk 标头字段值为 ?(动态)或 G(网关),或者当对跟踪状态进行交互式更改并由 U(更新)指示时。https://www.w3.org/TR/tracking-dnt/#response-头域

我的问题是如何在 Amazon Cloudfront 上设置自定义 DNT http-headers。我的回答将表明这可以通过 Lambda@edge 函数来完成。

4

1 回答 1

0

Amazon Cloudfront 支持 lambda 函数。

  1. 登录 AWS 管理控制台并打开 AWS Lambda 控制台
  2. 创建一个新的 lambda 函数
  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)来自 S3 源的 Amazon CloudFront 上的 HSTS,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/#tracking-status-value

于 2017-05-03T21:27:48.187 回答