【问题标题】:Getting error : Access-Control-Allow-Headers in preflight response出现错误:预检响应中的 Access-Control-Allow-Headers
【发布时间】:2019-07-14 22:06:51
【问题描述】:

错误:请求标头字段 Access-Control-Allow-Origin 不是 Access-Control-Allow-Headers 在预检响应中允许。

在 chrome 中禁用 cors 插件的情况下点击 aws api 时出现上述错误。 当 cors 启用时,api 返回正确的响应。

javascript 中是否有任何机制可以在 chrome 中禁用 cors 的情况下从 api 获取响应?

我添加了我的请求和响应标头的屏幕截图以供参考

*注意:Cors 在服务器端(AWS api 网关)启用

【问题讨论】:

  • 如果您不想检查 CORS,请从服务器端禁用它,您将能够通过禁用 chrome 从 chrome 发送请求。

标签: javascript amazon-web-services cors aws-api-gateway api-gateway


【解决方案1】:

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin

好吧,不是,我们可以看到Access-Control-Allow-Origin 未列在您屏幕截图的Access-Control-Allow-Headers 响应标头中。

所以你有两个选择:

  1. 更改响应标头以允许它
  2. 首先不要从客户端发送它

由于Access-Control-Allow-Origin 是响应标头(您的 JS 不能授予自己读取数据的权限——这会使 CORS 毫无意义)根本没有意义从客户端发送它, 选项 2 是正确的。

修复您的客户端代码。

【讨论】:

    【解决方案2】:

    如果您将 Lambda 与代理集成一起使用,则需要在 HTTP 响应中指定 CORS 来源。

    对于 Lambda 或 HTTP 代理集成,您仍然可以设置 API 网关中所需的 OPTIONS 响应标头。但是,您必须 依靠后端返回 Access-Control-Allow-Origin 标头 因为代理禁用了集成响应 一体化。 https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

    像这样在 NodeJS 中:

    var response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Origin" : "*"
        },
        body: JSON.stringify({
            someReturnData
        })
    };
    callback(null, response);
    

    【讨论】:

    • 响应已经Access-Control-Allow-Origin: *。这不是问题,因为错误消息很清楚。
    • 屏幕截图中的请求是针对 API-G 处理的 OPTIONS 请求。在 Lambda 代理中,这也需要手动添加到 GET/POST 请求中。
    • 浏览器没有发出 GET 或 POST 请求,因为预检响应没有授予它发出请求的权限。
    猜你喜欢
    • 2016-05-15
    • 2018-04-25
    • 1970-01-01
    • 2019-09-09
    • 2017-08-15
    • 2016-04-24
    • 2019-02-21
    • 2017-12-02
    • 1970-01-01
    相关资源
    最近更新 更多