使用来自本地主机的 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。
我有一个项目,我正在我的本地机器上工作,这只是一个网站,还有一些带有 Axios 的 javascript。当我在输出末尾使用无服务器将代码部署到 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调用