我想从我的 Amazon CloudFront 分配中移除或修改 HTTP 响应标头,例如 Server、X-Cache、X-Forwarded-Host 或 X-Forwarded-Server。
简短描述
根据要修改或移除的响应标头选择以下解决方法之一:
- 要无条件修改或移除 Server 标头的值,请使用响应标头策略。
- 要根据特定条件修改 Server 标头的值,请使用 CloudFront 函数。
- 要移除 X-Forwarded-Host 或 X-Forwarded-Server 标头,请使用自定义标头。
- 无法移除或修改 X-Cache 标头。X-Cache 标头必须保留,因为它显示标头的来源,例如 CloudFront 缓存、函数或源。
**注意:**CloudFront 会在发送给查看器的响应中添加自己的 Server 和 X-Cache 标头。即使您使用响应标头策略从源响应中移除标头,CloudFront 也会添加标头。
解决方法
使用响应标头策略修改或移除 Server 标头
要修改 Server 标头,请完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Policies(策略),然后选择 Response headers(响应标头)选项卡。
- 选择 Create response headers policy(创建响应标头策略)。
- 在 Details(详细信息)部分的 Name(名称)中,输入策略的名称。
- 在 Custom headers(自定义标头)部分中,选择 Add header(添加标头)。
- 对于 Name(名称),输入 Server。
- 对于 Value(值),输入您的 Server 标头值。
- 为您的自定义 Server 标头选择 Origin override(源覆盖)选项,然后选择 Create(创建)。
- 将响应标头策略附加到您在 CloudFront 分配中所需的行为。
CloudFront 部署更改,然后使用您在策略中指定的自定义值覆盖 Server 标头值。
要移除 Server 标头,请完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Policies(策略),然后选择 Response headers(响应标头)选项卡。
- 选择 Create response headers policy(创建响应标头策略)。
- 在 Details(详细信息)部分的 Name(名称)中,输入策略的名称。
- 在 Remove headers(移除标头)部分中,选择 Add header(添加标头)。
- 对于 Name(名称),输入 Server,然后选择 Create(创建)。
- 将响应标头策略附加到您在 CloudFront 分配中所需的行为。
CloudFront 部署更改,然后将 Server 标头值替换为 CloudFront 值。
使用 CloudFront 函数根据特定条件修改 Server 标头
要使用您为特定条件指定的行为的自定义值覆盖 Server 标头值,请完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Functions(函数),然后选择 Create function(创建函数)。
- 对于 Name(名称),输入函数名称。
- 对于 Runtime(运行时),选择 cloudfront-js-2.0。
- 选择 Create function(创建函数)。
- 在代码编辑器的 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 标头值。
- 选择 Save changes(保存更改)。
- 将函数关联到您在 CloudFront 分配中所需的行为。
对于您在函数中定义的特定条件下的行为,CloudFront 函数使用您的自定义值覆盖 Server 标头。
使用自定义标头移除"X-Forwarded-Host"或"X-Forwarded-Server"标头
完成以下步骤:
-
创建 Lambda@Edge 函数。
-
为 Lambda@Edge 函数添加触发器。
Node.js 中的以下示例函数移除了 X-Forwarded-Host 和 X-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;
};
-
部署 Lambda@Edge 函数,然后将该函数关联到您的 CloudFront 分配的查看器请求触发器。
-
在将请求转发到源之前,使用触发器移除指定的标头。
相关信息
了解响应标头策略
使用 CloudFront Functions 在边缘进行自定义
使用 Lambda@Edge 在边缘进行自定义