【问题标题】:Amazon Cross-Origin Request Blocked:亚马逊跨域请求被阻止:
【发布时间】:2020-03-06 13:41:54
【问题描述】:

我们的后端使用 Angular 4 构建,并使用无服务器部署在 AWS S3 上。一切都很好,但我们有一个小问题。如果添加了自定义标头,则会引发如下警告。

“跨域请求被阻止:同源策略不允许读取https://7uqw9ghjr7.execute-api.eu-west-2.amazonaws.com/uat/user的远程资源 . (原因:CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“app_version”)。”

“跨域请求被阻止:同源策略不允许读取https://7uqw9ghjr7.execute-api.eu-west-2.amazonaws.com/uat/user的远程资源 . (原因:CORS 请求没有成功)。”

“app_version”是我添加的自定义标头。

如果我删除此自定义标头,一切正常。

如果有任何帮助,我将不胜感激。

我需要修复这个“跨域请求被阻止”问题并添加我的自定义标头。

这是包含在每个 REST API 调用中的 HttpHeader 代码

headers: new HttpHeaders({
    'Content-Type': 'application/json',
    'app_version': '1.0'
  })

【问题讨论】:

    标签: angular amazon-web-services cors


    【解决方案1】:

    “我们的后端是用 Angular 4 构建的,它使用无服务器部署在 AWS S3 上。”:也许你的意思是前端正在与后端的一些 REST API 服务交互(?)。

    您可以进一步澄清您的场景,但根据您的最后几行:“这是包含在每个 REST API 调用中的 HttpHeader 代码”我可以推断这是使用 Lambda 代理方法使用 API Gateway 时的经典 CORS 错误,请记住这就是无服务器框架在默认情况下的工作方式。请阅读:https://serverless.com/framework/docs/providers/aws/events/apigateway/

    因此,您始终必须在响应中返回一组完整的标头,从而允许跨域资源共享:

    let response = {
        statusCode: 200,
        headers: {
            //"Content-Type": "application/json",
            "X-Requested-With": '*',
            "Access-Control-Allow-Headers": 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Requested-With',
            "Access-Control-Allow-Origin": '*',
            "Access-Control-Allow-Methods": 'GET, OPTIONS',
            "Access-Control-Allow-Credentials": true// Required for cookies, authorization headers with HTTPS 
        },
        body: body
    }
    

    在某些情况下,这可能会导致一些繁琐的任务,因此您可以使用 Middy 来检查运行良好的解决方案:https://github.com/middyjs/middy

    【讨论】:

    • 非常感谢 fidelio。我会快速看一下github,很快就会回复你。
    • 您应该将app_version 添加到Access-Control-Allow-Headers 列表中,因为这是错误消息引用的自定义标头。
    • 看了下面的cmets,我明白了,你是把你的后端应用上传到S3 bucket,对吗?如果是,我建议选择 EC2 实例,或者 API Gateway + Lambda Function 作为“无服务器”方法(非常酷)。请记住,AWS S3 是一种存储服务,因此它无法管理流程,例如您的后端应用程序需求,只能管理它们的静态内容。
    • 非常感谢大家。我通过在 serverless.yml 文件中设置 cors 解决了这个问题,如下所示。 cors: origin: '*' headers: - Content-Type, - X-Amz-Date - Authorization - X-Api-Key - X-Amz-Security-Token - X-Amz-User-Agent - app_version allowCredentials: false
    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 2014-10-13
    • 2019-11-04
    • 2017-02-06
    • 2017-01-04
    • 2014-12-27
    相关资源
    最近更新 更多