【问题标题】:Connect to REST API from ANGULAR从 ANGULAR 连接到 REST API
【发布时间】:2016-09-10 23:30:19
【问题描述】:

我正在尝试连接到外部 POST api 以进行身份​​验证。 我正在尝试:

$http({
    method  : 'POST',
    url     : 'myURL',
    data    : {"j_username": "myUserName,"j_password": "myPassword"},
    headers : {
        'Content-Type': 'application/x-www-form-urlencoded',
    } 
})

但是我收到了这个错误:

XMLHttpRequest 无法加载 http://...url。预检的响应是 无效(重定向)

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

这看起来像是一个 CORS 问题。 如果 javascript 是从与您调用的 API 的域不同的域提供的,那么您将遇到 CORS 问题。简而言之,浏览器将检测到 javascript 是从域 A 提供的,并且 API 在域 B 上。接下来会发生什么取决于您要执行的操作,在这种情况下,您正在执行 POST,这意味着浏览器将向 API 服务器发送 预检检查,询问是否可以使用来自域 A 的 javascript 访问它。 服务器必须响应说是,以便浏览器允许请求通过(实际上它比“说是”要复杂得多,但你明白了)。

简而言之,您需要配置 API 服务器以允许这样做。如果这不是您的 API,那么您需要询问拥有该 API 的人是否可以配置 CORS 以允许您的 javascript 访问它。

如果您确实需要使用这种设置,那么值得花时间阅读并正确理解它。另一方面,您可能只是在使用本地 js 文件添加某些内容,在这种情况下,您只需要知道它不会那样工作。

另见https://stackoverflow.com/a/23824093/11534

【讨论】:

  • 服务器没有响应说 "Yes" .... 这是对 CORS 工作方式的过度简化
  • @charlietfll - 完全同意。我只是想解释基本问题:)
  • 我需要做更多的配置吗?
  • @Kira:是的,你需要配置服务器。我已经更新了我的答案,并链接到另一个有更多细节的 SO q/a。祝你好运!
  • @KiraLayto 由于 CORS,并非所有 API 都可以通过 ajax 访问。有些也有jsonp 输出,但不是全部。这里不够了解。另一种方法是在您控制的服务器上使用代理来获取数据
猜你喜欢
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2015-07-19
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多