wake-up-neo.com

Bei XMLHttpRequest wird weiterhin der Fehler "Zugriffskontrolle-Zulassen-Ursprung" angezeigt

Ich hätte dieses Problem mit der Funktion jQuery $.ajax Gelöst, aber in diesem Fall ist jQuery keine Option. Stattdessen gehe ich mit CORS-Anfrage. Ich habe das Gefühl, dass mit dem Webserver, der auf die Anfrage reagiert, etwas nicht stimmt, und es fällt mir schwer, herauszufinden, woran es liegt.

Hier ist mein Code zum Erstellen der CORS-Anfrage

var httpRequest = new XMLHttpRequest();
httpRequest.open('POST', url, true);
httpRequest.setRequestHeader( 'Access-Control-Allow-Origin', '*');
httpRequest.setRequestHeader( 'Content-Type', 'application/json' );
httpRequest.onerror = function(XMLHttpRequest, textStatus, errorThrown) {
  console.log( 'The data failed to load :(' );
  console.log(JSON.stringify(XMLHttpRequest));
};
httpRequest.onload = function() {
  console.log('SUCCESS!');
}

Hier ist der console.log-Fehler:

XMLHttpRequest kann nicht geladen werden http://test.testhost.com/testpage . Anforderungsheaderfeld Access-Control-Allow-Origin wird von Access-Control-Allow-Headers nicht zugelassen.

Hier sind die Header-Informationen:

> Remote Address:**.**.***.**:80 Request
> URL:http://test.testdomain.com/testpage Request
> Request Method:OPTIONS
> Status Code:200 OK

Kopfzeilen anfordern:

OPTIONS /content-network HTTP/1.1
Host: test.testhost.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Request-Method: POST
Origin: http://test.testdomain.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Access-Control-Request-Headers: access-control-allow-Origin, content-type
Accept: */*
Referer: http://test.testdomain.com/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

Antwort-Header:

HTTP/1.1 200 OK
Date: Thu, 14 Aug 2014 20:17:25 GMT
Server: Apache
Last-Modified: Thu, 14 Aug 2014 20:17:25 +0000
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
ETag: "1408047445"
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Vary: Accept-Encoding
Content-Encoding: gzip
Access-Control-Allow-Headers: Origin, x-requested-with, content-type
Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS
Content-Length: 6117
Connection: close
Content-Type: text/html; charset=utf-8
13
CR47

Durch die Antwort Ihres Servers kann die Anforderung drei bestimmte nicht einfache Header enthalten:

Access-Control-Allow-Headers:Origin, x-requested-with, content-type

ihre Anfrage enthält jedoch einen Header, der in der Antwort des Servers nicht zulässig ist:

Access-Control-Request-Headers:access-control-allow-Origin, content-type

Alle nicht einfachen Header, die in einer CORS-Anforderung gesendet werden, müssen im Antwortheader Access-Control-Allow-Headers Explizit zulässig sein. Der unnötige Access-Control-Allow-Origin - Header, der in Ihrer Anfrage gesendet wurde, ist in der CORS-Antwort des Servers nicht zulässig. Dies ist genau das, was die Fehlermeldung "... nicht erlaubt durch Access-Control-Allow-Headers" Ihnen mitteilen wollte.

Es gibt keinen Grund für die Anforderung, diesen Header zu haben: Er führt nichts aus, da Access-Control-Allow-Origin Ein Antwort Header ist, kein Anforderungsheader.

Lösung : Entfernen Sie den setRequestHeader -Aufruf, der Ihrer Anfrage einen Access-Control-Allow-Origin - Header hinzufügt.

14
apsillers

Entfernen:

httpRequest.setRequestHeader( 'Access-Control-Allow-Origin', '*');

... und füge hinzu:

httpRequest.withCredentials = false;
3
Max

Zusätzlich zu Ihrem CORS-Problem ist auf dem Server, auf den Sie zugreifen möchten, HTTP-Basisauthentifizierung aktiviert. Sie können Anmeldeinformationen in Ihre domänenübergreifende Anforderung aufnehmen, indem Sie die Anmeldeinformationen in der URL angeben, die Sie an XHR übergeben:

url = 'http://username:[email protected]/testpage'
0
Mark Ignacio