使用来自本地主机的 AWS Lambda REST URL [重复]

Posted

技术标签:

【中文标题】使用来自本地主机的 AWS Lambda REST URL [重复]【英文标题】:Using AWS Lambda REST URL from Local Host [duplicate] 【发布时间】:2019-12-16 17:17:39 【问题描述】:

我只使用 AWS Lambdas 几个星期,我正在尝试更多地了解它们,特别是如何实现我在网页上编写的 Lambda。

我有一个项目,我正在我的本地机器上工作,这只是一个网站,还有一些带有 Axiosjavascript。当我在输出末尾使用无服务器将代码部署到 AWS Lambda 时,我得到一个 url,我们称之为THE_URL。当我将此页面复制并粘贴到我的浏览器中时,我会被带到一个网页,该网页上的响应符合我的预期。

但是在我的网站上,当我按下按钮时,我会调用这个脚本,

axios
.get("THE_URL")
.then(data => console.log(data))
.catch(err => console.log(err));

这给了我错误Access to XMLHttpRequest at 'THE_URL' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.,我已经查过了,这似乎很常见。我已经研究并研究了在线可能的解决方案,这导致我作为标头传递,并标记请求,使其看起来像这样,

axios
    .get("THE_URL",
       headers: 
          "Access-Control-Allow-Origin": "*"
       ,
        withCredentials: true
       
     )

但是有了这个,我得到一个看起来像这样的错误Access to XMLHttpRequest at 'THE_URL' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.,我无法在网上找到任何解决方案。所以我想我会在这里问一下,看看你们中是否有人遇到过这样的错误?

感谢阅读!

【问题讨论】:

“我已经研究并调查了在线可能的解决方案,这导致我作为标题传递” ????你能指导我到这些资源吗?我希望将它们从 Internet 上强制删除,因为人们一直在尝试将 Access-Control-* 标头添加到他们的请求中。负责允许跨域访问资源的标头是 response 标头。它们必须在远程资源上启用 withCredentials 是另一个经常被误用的配置。它允许将 cookie 添加到请求中,前提是您的客户端(浏览器)已经为 3rd 方域设置了 cookie。 API 服务不倾向于使用身份验证 cookie,因此不太可能需要。 【参考方案1】:

CORS 标头应该在您的服务器中,而不是客户端中。服务器控制哪些客户端域可以访问它。通过添加“*”,您允许任何站点从您的服务器请求资源,包括本地主机(假设您的 lambda 是可公开访问的)

更新 lambda 以返回 Access-Control-Allow-Origin: * 标头。

https://serverless.com/framework/docs/providers/aws/events/apigateway/#enabling-cors

【讨论】:

非常感谢 Avner,这帮助我让它正常工作!希望你有一个美好的一天。 不客气,很高兴为您提供帮助! Avner,虽然这适用于 GET 方法,但我正在研究 POST 方法失败。在浏览了 chrome 中的开发人员选项卡后,我发现在 GET 中请求的内容类型是application/json,而在帖子中是application/json:charset=utf-8。我无法删除内容类型上的这个标志,出于某种原因,我觉得这就是导致 Access-Control-Allow-Origin:* 标头失败的原因。你认为这是原因吗? 听起来您缺少 Access-Control-Allow-Methods 标头需要允许 OPTIONS、GET、POST 嘿 Avner,感谢您的回复。我试过了,但没有用,您可以在此链接中查看有关该问题的更多详细信息:***.com/q/57454105/9736802

以上是关于使用来自本地主机的 AWS Lambda REST URL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AWS SAM 本地 docker 实例连接到主机 MySQL?

返回空正文时来自python中AWS lambda的内部服务器错误

我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?

AWS Lambda函数对在EC2中部署的api进行rest api调用

AWS lambda 函数-“发生错误:收到来自 Lambda 的错误响应:已处理”

来自 Lambda 的 AWS Cognito adminCreateUser,使用 Amplify CLI 创建