webentwicklung-frage-antwort-db.com.de

Wie ordne ich XMLHTTPREQUEST einen Basisauthentifizierungsheader zu?

Ich habe viele Antworten von Preflight und CORS gelesen, bitte posten Sie keine Links, die auf das verweisen, was ich lesen sollte. Viele der Antworten stammen aus Serverperspektive, aber in diesem Fall bin ich der Kunde. Stelle ich den Origin-Header ein? Ich gehe davon aus, dass dies eine einfache Bitte ist, richtig?

 req.open("POST", url, true);
 req.setRequestHeader( 'Content-Type',   'application/blahblah' );
 req.setRequestHeader( 'Accept', 'application/blahblah' );
 req.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass)); 
 req.send();

Aber es funktioniert immer noch nicht, mein Fehler:

Die Antwort auf die Preflight-Anforderung besteht die Zugriffskontrollprüfung nicht: In der angeforderten Ressource ist kein Header 'Zugriffskontrolle-Zulassen-Ursprung' vorhanden. Origin 'null' ist daher nicht zugänglich. Die Antwort hatte den HTTP-Statuscode 500.

14
carrots

Lösung:

req.setRequestHeader('Authorization', 'Basic [base64 encoded password here]' );
8
carrots

Wenn Sie den Berechtigungskopf setzen möchten

req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);
17
epascarello

Dieser Beitrag ist alt, aber für jeden anderen zu beantworten, der darauf stößt.

Es ist nichts falsch mit Ihrem Autorisierungsheader. Das Problem, mit dem Sie konfrontiert sind, hängt mit CORS zusammen.

Sie legen den Origin-Header nicht selbst fest. Der Browser erledigt das für Sie. Wenn Ihr Ursprung null ist, liegt das vermutlich daran, dass Sie Ihren Code mit file:/// Anstelle von http:// Ausführen.

5
skinnysoftware

Wenn Sie dies für eine API-Anforderung verwenden, sendet XMLHttpRequest beim Hinzufügen des Authorization-Headers zunächst eine OPTIONS-Anforderung, die möglicherweise von einigen APIs abgelehnt wird.

Um dies zu umgehen, können Sie auch Folgendes tun:

var invocation = new XMLHttpRequest();
invocation.open("GET", url, true, username, password);
invocation.withCredentials = true;

Dadurch wird der Authorization-Header hinzugefügt und die Preflight-Anforderung vermieden.

4
Nick Spicer