为什么这个HTTP请求失败?

问题描述:

我使用这个代码使API请求:为什么这个HTTP请求失败?

function httpGet(url){ 
var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
    console.log(this.status) 
    if (this.readyState == 4 && this.status == 200) { 
     console.log("Got names") 
     getNamesFromJSONArray(request.responseText); 
    }; 
}; 
request.open("GET", url, true); 
request.setRequestHeader("Authorization", "Basic (API key goes here)"); 
request.setRequestHeader("Accept-Encoding", "gzip"); 
request.send(); 
} 

它的工作只是一天,但现在失败了,告诉我:

无法加载资源:预检响应不成功

的XMLHttpRequest不能LOA d https://api.insight.ly/v2.1/contacts。 预检反应不成功

另外,“Got names”从未打印过。

这段代码为什么会在前一天工作时崩溃?这是API端还是我的问题?

更新! 我在api网站上找到了this。实现这个最简单的方法是什么?我目前没有后端,除此之外不需要任何东西。我理解这个问题是因为他们不希望我的API使用客户端可读的Javascript,这很有道理。我是否可以用其他方式登录到API,可能是用户的电子邮件和密码?

+0

听起来像是一个CORS问题给我。您可能需要发送正确的访问标题。 –

+0

@ObsidianAge那么为什么它在几天前工作? –

+0

有关此处发生的情况的说明,请参阅https://*.com/a/45533146/441757或https://*.com/questions/45586064/receive-oauth2-token-from-xhr-request/45586285# 45586285或https://*.com/questions/45210184/why-is-my-drupal-8-cors-setup-not-working/45312903#45312903(标记为重复的问题遗憾地没有答案实际上就这种情况的所有行为进行了解释,就我所见)。要点是:'https:// api.insight.ly/v2.1/contacts'端点需要对OPTIONS请求进行授权。它不应该。 – sideshowbarker

该API需要能够(正确)处理CORS,具体而言,您的问题是关于预印

在进行实际的CORS调用之前,它将使用OPTIONS方法尝试相同的调用,以确保它的安全性。服务器预计会为此返回某些标头。

所以是的,这是在API方面。

您可以阅读关于HTTP access control (CORS)的更多信息

+0

感谢您的回答!我看着这个并发布了一个更新我的问题。有什么建议? –

+0

对我来说,他们已经回答了你的问题。不,你不能使用CORS(你不能直接调用这个API),而且他们已经给了你一个选项,这就是编写一个代理。 –