首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS cloudfront在不使用Lambda@Edge的情况下添加自定义头

AWS cloudfront在不使用Lambda@Edge的情况下添加自定义头
EN

Stack Overflow用户
提问于 2020-04-08 16:34:52
回答 3查看 9.5K关注 0票数 5

我想将x-frame-options作为sameorigin添加到AWS CloudFront服务中,该服务在S3桶上为我的应用程序提供服务。

我不希望添加新的Lambda函数来编辑请求头。

实际上,我找到了一个类似附件的地方:

表示我的应用程序的CloudFront分发集、CloudFront分发设置、->源和原产地组、-> S3内容项、添加源自定义标头、->标头名称:->值:sameorigin

但是,当部署完成时,在S3桶文件和URL的所有相关请求中仍然会有旧的头文件。

我如何在没有任何Lambda函数的情况下直接使用现有的AWS CloudFront面板来添加标头呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-18 23:02:59

截至2021年11月,Cloudfront现在支持响应头策略。这允许您将策略与您的发行版相关联,后者定义了要返回的其他响应头。如果不想使用完整的安全头屏蔽策略,可以使用x-frame-options创建自定义策略。

票数 5
EN

Stack Overflow用户

发布于 2020-04-08 19:20:21

您正在配置的“源自定义标头”不是从原点添加到响应中的头,而是添加到源请求中的头。来自CloudFront文档

您可以将CloudFront配置为将自定义标头添加到它发送到原点的请求。这些自定义标头使您能够从原始源发送和收集信息,而这些信息在典型的查看器请求中没有得到。甚至可以为每个源自定义这些标头。CloudFront支持自定义和亚马逊S3起源的自定义标头。

因此,这不是添加响应头的选项。虽然使用S3元数据有可能影响返回给查看器的标头,但这只适用于Content-Type-header,因此这不是一个选项。

最好的选择是使用Lambda@Edge函数。虽然这听起来是一种繁琐而昂贵的解决方案,但实际上并非如此。对于您的用例,Lambda@Edge函数的代码可能非常简单,如下所示:

代码语言:javascript
运行
复制
def lambda_handler(event, context):
    response = event["Records"][0]["cf"]["response"]
    response["headers"]["x-frame-options"] = ":sameorigin"
    return response

当您将此Lambda@Edge函数配置为在CloudFront中的“原产地响应”事件上触发时,它不会对每个查看器请求执行,而是只在返回给查看器的内容没有被CloudFront缓存并且必须首先从S3获取时执行。这有助于最小化Lambda@Edge函数的执行带来的额外延迟和成本。

票数 10
EN

Stack Overflow用户

发布于 2021-07-29 17:51:19

这就是答案帮助我解决了这个问题,但我首先找到了这个问题,所以我也在这里分享了答案。

现在,您可以通过CloudFront函数设置头部,而不必创建Lambda@Edge函数。文档中提供的示例代码非常适合设置过时的浏览器安全性所需的标头:

代码语言:javascript
运行
复制
function handler(event) {
    var response = event.response;
    var headers = response.headers;

    // Set HTTP security headers
    // Since JavaScript doesn't allow for hyphens in variable names, we use the dict["key"] notation 
    headers['strict-transport-security'] = { value: 'max-age=63072000; includeSubdomains; preload'}; 
    headers['content-security-policy'] = { value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}; 
    headers['x-content-type-options'] = { value: 'nosniff'}; 
    headers['x-frame-options'] = {value: 'DENY'}; 
    headers['x-xss-protection'] = {value: '1; mode=block'}; 

    // Return the response to viewers 
    return response;
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61105557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档