微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提取API不适用于localhost / 127.0.0.1

如何解决提取API不适用于localhost / 127.0.0.1

在编写时localhost,由于js代码正在浏览器中运行,因此它会调用(本地)浏览器所在的(本地)机器。

您应该为您的API端点创建一个域/子域,并使用它代替localhost,或者继续使用硬编码的IP地址。

您还应该只在允许的后端来源中允许您的前端网站域。例如 您的网站可以是www.example.com,后端URL可以是www.api.example.com。您只能允许www.example.comorigin因为可以通过进行投放www.api.example.com。您将需要在后端进行配置。

解决方法

就像背景一样,我有一个坐在远程EC2
Ubuntu实例上的react应用。同一台服务器还运行一个监听8080端口的Go应用程序(该端口已从“安全性”设置中向所有人开放)。

我正在尝试通过React应用程序使用Fetch API发出请求,如下所示:

var bearer = 'Bearer ...'
return fetch('http://localhost:8080/home',{
  headers: new Headers({
    'Authorization': bearer
  })
})

从Chrome和Firefox的控制台中,我得到:

尝试提取资源时出现TypeError:NetworkError

当我用代替时localhost,也是如此127.0.0.1

但是,使用EC2实例的外部IP是可行的(并且由于“ Authorization”标头而触发了CORS请求,该请求由服务器进行了平稳处理)。

在后一种情况下,我还可以看到服务器记录了OPTIONS和GET的传入请求(在前一种情况下,这两种方法都没有日志)。

我还尝试了从EC2机器到CURL的访问,localhost并且该请求有效地通过了,这使我认为使用Fetch API根本不会触发该请求。

任何意见,将不胜感激。如果我做错了什么,请指出正确的方向。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。