CORS - Api 网关、lambda 和 vue.js [关闭]

Posted

技术标签:

【中文标题】CORS - Api 网关、lambda 和 vue.js [关闭]【英文标题】:CORS - Api Gateway, lambda, and vue.js [closed] 【发布时间】:2020-11-29 05:27:51 【问题描述】:

我很困惑为什么在调用我的受自定义授权方保护的 API 时收到以下 CORS 错误:

从源“http://localhost:8080”访问“https://...”处的 XMLHttpRequest 已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头出现在请求的资源。

在我的 SAM 模板中,我设置了我认为从本地计算机访问所需的内容:

      Type: AWS::Serverless::Api
      Properties:
        StageName: Prod  
        Cors:
          AllowHeaders: "'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization'" 
          AllowOrigin: "'*'" 

当我使用有效令牌通过 Postman 调用时,我得到了正确的响应,其中包含所有必需的响应标头:

访问控制允许来源 *

Access-Control-Allow-Headers Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token

Access-Control-Allow-Methods GET,OPTIONS

然而,当我使用 axios 在我的 vue 应用程序中调用时,我收到了上述错误:

  mounted() 
      …

      const config = 
        headers: 
          authorization: jwt
        
      

      axios.get(‘…..’, config)
        .then(val => this.info = val)
        .catch(err => console.log(err))
      
  

不知道为什么从 Postman 调用,一切看起来都很好并且工作正常。但从 vue 来看,它不是。

感谢任何帮助。 谢谢。

【问题讨论】:

使用浏览器开发者工具中的“网络”选项卡检查您发出的确切请求以及返回的标头。当您设置请求标头时,我希望此请求会触发预检 OPTIONS 请求。同样,“网络”选项卡应显示这是否正在发生以及是否成功。 添加@skirtle 建议的内容:当您查看浏览器开发工具中的“网络”选项卡时,还要检查响应的 HTTP 状态代码。如果 Chrome 没有向您显示,请使用 Firefox 中的“网络”选项卡。是 4xx 还是 5xx 错误而不是 200 OK 成功响应? 如果您使用 Postman 进行测试,请不要忘记添加 Origin 请求标头,例如 Origin: http://localhost:8080 【参考方案1】:

问题在于响应代码。原来我的自定义授权者期望在 Auth 标头前添加一个“不记名”。我没有在我的应用程序中这样做,它返回了授权错误。我只是将 CORS 设置为 200。

【讨论】:

以上是关于CORS - Api 网关、lambda 和 vue.js [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用代理集成时,API 网关和 Lambda 出现 CORS 错误**仅**

放大:即使在 API 网关和 Lambda 标头中启用了 CORS,但 CORS 标头“Access-Control-Allow-Origin”缺失错误

React.js - CORS 策略:请求的资源上不存在“Access-Control-Allow-Origin”标头。 [AWS - Lambda - API 网关]

AWS API Gateway + AWS Lambda 中的 CORS

如何在不设置 lambda 的情况下在 apigateway http_proxy 上添加 CORS?

从帖子正文读取时,AWS API 网关 CORS 错误