跳至内容

如何在 CloudFront 中移除或修改 HTTP 响应标头?

2 分钟阅读
0

我想从我的 Amazon CloudFront 分配中移除或修改 HTTP 响应标头,例如 Server、X-Cache、X-Forwarded-Host 或 X-Forwarded-Server。

简短描述

根据要修改或移除的响应标头选择以下解决方法之一:

  • 要无条件修改或移除 Server 标头的值,请使用响应标头策略。
  • 要根据特定条件修改 Server 标头的值,请使用 CloudFront 函数。
  • 要移除 X-Forwarded-HostX-Forwarded-Server 标头,请使用自定义标头。
  • 无法移除或修改 X-Cache 标头。X-Cache 标头必须保留,因为它显示标头的来源,例如 CloudFront 缓存、函数或源。

**注意:**CloudFront 会在发送给查看器的响应中添加自己的 ServerX-Cache 标头。即使您使用响应标头策略从源响应中移除标头,CloudFront 也会添加标头。

解决方法

使用响应标头策略修改或移除 Server 标头

要修改 Server 标头,请完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 在导航窗格中,选择 Policies(策略),然后选择 Response headers(响应标头)选项卡。
  3. 选择 Create response headers policy(创建响应标头策略)。
  4. Details(详细信息)部分的 Name(名称)中,输入策略的名称。
  5. Custom headers(自定义标头)部分中,选择 Add header(添加标头)。
  6. 对于 Name(名称),输入 Server
  7. 对于 Value(值),输入您的 Server 标头值。
  8. 为您的自定义 Server 标头选择 Origin override(源覆盖)选项,然后选择 Create(创建)。
  9. 响应标头策略附加到您在 CloudFront 分配中所需的行为。

CloudFront 部署更改,然后使用您在策略中指定的自定义值覆盖 Server 标头值。

要移除 Server 标头,请完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 在导航窗格中,选择 Policies(策略),然后选择 Response headers(响应标头)选项卡。
  3. 选择 Create response headers policy(创建响应标头策略)。
  4. Details(详细信息)部分的 Name(名称)中,输入策略的名称。
  5. Remove headers(移除标头)部分中,选择 Add header(添加标头)。
  6. 对于 Name(名称),输入 Server,然后选择 Create(创建)。
  7. 响应标头策略附加到您在 CloudFront 分配中所需的行为。

CloudFront 部署更改,然后将 Server 标头值替换为 CloudFront 值。

使用 CloudFront 函数根据特定条件修改 Server 标头

要使用您为特定条件指定的行为的自定义值覆盖 Server 标头值,请完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 在导航窗格中,选择 Functions(函数),然后选择 Create function(创建函数)。
  3. 对于 Name(名称),输入函数名称。
  4. 对于 Runtime(运行时),选择 cloudfront-js-2.0
  5. 选择 Create function(创建函数)。
  6. 在代码编辑器的 Development(开发)选项卡中,输入以下代码:
    function handler(event) {
        var response = event.response;
        var headers = response.headers;
    
        if ('server' in headers && headers.server.value === 'YOUR_CONDITIONAL_VALUE') {
            headers.server.value = 'YOUR_CUSTOM_VALUE';
        }
    
        return response;
    }
    **注意:**将 YOUR_CONDITIONAL_VALUE 替换为您的条件值,将 YOUR_CUSTOM_VALUE 替换为您的 Server 标头值。
  7. 选择 Save changes(保存更改)。
  8. 将函数关联到您在 CloudFront 分配中所需的行为。

对于您在函数中定义的特定条件下的行为,CloudFront 函数使用您的自定义值覆盖 Server 标头。

使用自定义标头移除"X-Forwarded-Host"或"X-Forwarded-Server"标头

完成以下步骤:

  1. 创建 Lambda@Edge 函数

  2. 为 Lambda@Edge 函数添加触发器
    Node.js 中的以下示例函数移除了 X-Forwarded-HostX-Forwarded-Server 标头:

    export const handler = async (event) => {
        const response = event.Records[0].cf.response;
        const headers = response.headers;
    
        // Remove X-Forwarded-Host header
        delete headers['x-forwarded-host'];
    
        // Remove X-Forwarded-Server header
        delete headers['x-forwarded-server'];
    
        return response;
    };
  3. 部署 Lambda@Edge 函数,然后将该函数关联到您的 CloudFront 分配的查看器请求触发器。

  4. 在将请求转发到源之前,使用触发器移除指定的标头。

相关信息

了解响应标头策略

使用 CloudFront Functions 在边缘进行自定义

使用 Lambda@Edge 在边缘进行自定义

AWS 官方已更新 7 个月前