4 Stimmen

Benutzerauthentifizierung mit XMLHttpRequest funktioniert in IE, nicht in Chrome?

Die folgende Funktion funktioniert im IE, aber nicht in Chrome:

function doStuff() {
  var request = new XMLHttpRequest();
  request.open("POST", "http://twitter.com/statuses/update.json", true, "USERNAME-HERE", "PASSWORD-HERE");
  request.send("status=STATUS UPDATE HERE");
}

Chrome erzeugt die folgende Anfrage. Beachten Sie, dass der Authorization-Header fehlt:

OPTIONS /statuses/update.json HTTP/1.1
Host: twitter.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5
Access-Control-Request-Method: POST
Origin: file://
Access-Control-Request-Headers: Content-Type
Accept: \*/\*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,\*;q=0.3

Ich erhalte die folgende Antwort (http 401):

HTTP/1.1 401 Unauthorized
Date: Wed, 03 Feb 2010 00:39:33 GMT
Server: hi
Status: 401 Unauthorized
WWW-Authenticate: Basic realm="Twitter API"
X-Runtime: 0.00107
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache, max-age=300
Set-Cookie: \_twitter\_sess=BAh7BzoHaWQiJTUxMTc2Nzk4N2U0YzMzZmU0ZTQyNzI4NjQyYjI3ODE2Igpm%250AbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAG%250AOgpAdXNlZHsA--bb61324c3ba12c3cd1794b3895a906a69c154edd; domain=.twitter.com; path=/
Expires: Wed, 03 Feb 2010 00:44:33 GMT
Vary: Accept-Encoding
Content-Length: 73
Connection: close

{"request":"/statuses/update.json","error":"Could not authenticate you."}

Wie soll ich also einen Benutzernamen und ein Passwort an XHR übergeben? Die Webkit/Safari-Dokumentation sagt, dass die Open-Methode diese Parameter annehmen sollte, also bin ich nicht sicher, warum es fehlschlägt.

4voto

i_am_jorf Punkte 52346

Die Lösung war, dass ich Folgendes hinzufügen musste

request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

Die Art und Weise, wie ich dies tue ist... speziell... so kann dies nicht von viel Nutzen für andere in Zukunft sein. Aber sobald ich diese Webkit hinzugefügt begann Hinzufügen von Authorization.

3voto

EricLaw Punkte 55641

So wie es aussieht, versuchen Sie, eine X-Domain XMLHTTPRequest durchzuführen, weshalb Chrome die OPTIONS-Anfrage vor dem Flug sendet. Da der Twitter-Server nicht auf die OPTIONS-Anfrage antwortet, die angibt, dass der X-Domain-Zugriff in Ordnung ist, kommt es hier zu einem Fehler.

Ihr Code würde im IE nur in der Zone "Lokaler Computer" funktionieren, oder wenn Sie die x-Domain-Prüfung deaktivieren (sehr gefährlich)

2voto

AJ. Punkte 26360

Haben Sie es schon versucht?

request.setRequestHeader('Authorization', 'yourvalue');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X