2017-09-20 2 views
1

Ich mache eine Anfrage API mit diesem Code:Warum schlägt diese HTTP-Anfrage fehl?

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(); 
} 

Es nur den anderen Tag gearbeitet, aber jetzt schlägt es, mir zu sagen:

fehlgeschlagen Ressource laden: Preflight Antwort ist nicht erfolgreich

und

XMLHttpRequest kann nicht loa d https://api.insight.ly/v2.1/contacts. Preflight-Antwort ist nicht erfolgreich

Auch "Got Namen" wird nie gedruckt.

Warum sollte dieser Code brechen, wenn es nur den anderen Tag gearbeitet? Ist es ein Problem auf der API oder auf meinem?

UPDATE! Ich fand this auf der api-Website. Was wäre der einfachste Weg dies zu implementieren? Ich habe derzeit kein Backend und brauche für nichts außer diesem. Ich verstehe das Problem, weil sie nicht möchten, dass meine API in Client-lesbarem Javascript, was Sinn macht. Könnte ich mich auf andere Weise in die API einloggen, vielleicht durch die E-Mail-Adresse und das Passwort eines Benutzers?

+0

Klingt wie ein CORS Problem für mich. Sie müssen wahrscheinlich die richtigen Zugriffsheader senden. –

+0

@ObsidianAge Warum hat es dann vor ein paar Tagen funktioniert? –

+0

Für eine Erklärung von dem, was hier geschieht, sehen https://stackoverflow.com/a/45533146/441757 oder https://stackoverflow.com/questions/45586064/receive-oauth2-token-from-xhr-request/45586285# 45586285 oder https://stackoverflow.com/questions/45210184/why-is-my-drupal-8-cors-setup-not-working/45312903#45312903 (die markierte Frage als ein Duplikat leider keine Antwort hat, die erklärt tatsächlich überhaupt das Verhalten für diese Art von Fall, soweit ich sehen kann). Der Kernpunkt ist: Der Endpunkt "https: // api.insight.ly/v2.1/contacts" erfordert die Berechtigung für OPTIONS-Anforderungen. Es sollte nicht. – sideshowbarker

Antwort

0

Die API muss in der Lage sein, CORS (korrekt) zu handhaben, speziell ist Ihre Frage über Preflight.

Bevor ein tatsächlichen CORS Anruf tätigt, wird es den gleichen Anruf versuchen, die OPTIONS-Methode unter Verwendung sicherzustellen, dass es sicher ist, es zu machen. Es wird erwartet, dass der Server bestimmte Header zurückgibt.

Also ja, ist dies auf der API-Seite.

können Sie weitere Details lesen Sie über HTTP access control (CORS)

+0

Danke für die Antwort! Ich habe mir das angesehen und ein Update zu meiner Frage gepostet. Irgendein Rat? –

+0

Scheint mir, sie haben deine Frage schon beantwortet. Nein, Sie können CORS nicht verwenden (Sie können die API nicht direkt aufrufen), und sie haben Ihnen bereits eine Option gegeben, nämlich einen Proxy zu schreiben. –

Verwandte Themen