AJAX Ursprung null ist nicht erlaubt, access-control-allow-origin
Arbeite ich mit BASEX (XML-Datenbank) und ich bin versucht, eine Verbindung zu dem http-server zum durchführen von REST-Anfrage mit Ajax. Mein code funktioniert auch im IE aber nicht mit Firefox oder Chrome. Ich habe zwei Möglichkeiten für die ajax-Abfrage.
Hier ist der erste :
var jqxhr = $.get( "http://localhost:8984/rest/factbook?query=//city&wrap=yes", function(data)
Dieser code funktioniert im IE aber nicht funktioniert auf anderen browser, nach einigen Recherchen fand ich, dass es ein problem mit der Herkunft:
Ursprung null ist nicht erlaubt, access-control-allow-origin
Und die zweite :
$.ajax({
type: "GET",
url: "http://localhost:8984/rest/factbook?query=//city&wrap=yes",
contentType: "xml/application",
dataType: "xml",
Dieser code funktioniert im IE und bekam eine 404 Fehler auf der anderen browser.
Habe ich mein script auf einem xampp-server aber ich habe den gleichen Fehler :
Herkunft http:/localhost ist nicht erlaubt, access-control-allow-origin
Ich habe auch versucht, ersetzen Sie local host durch die ip des Computers, aber ich habe den gleichen Fehler.
Kann mir bitte jemand helfen ?
- da localhost und localhost:8984 gesehen werden, wie unterschiedliche Domänen. Finden Sie die same-origin-policy.
- Der server für Ihre Datei muss wieder einen header namens
Access-Control-Allow-Origin
mit einem Wert von * allen Domänen oder bestimmten domain-Namen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, der Grund, warum Sie nicht bekommen kann es arbeiten, ist, dass einige server-Seite-Codierung benötigt werden.
Versuchen Sie diese, fügen Sie die Access-Control-Allow-Origin-header der HTTP-Antwort und setzen Sie den Wert auf *. Hier ist ein Stück Java-code für Ihre Informationen.
response.setHeader("Access-Control-Allow-Origin", "*")
Als Sie entdeckt haben, Sie von einigen Browsern nicht zulassen CORS Anfrage gemacht werden, wenn die Seite serviert von der Festplatte (null Herkunft). Dies ist, weil es als Sicherheitsrisiko angesehen, da alle Dateien auf der Festplatte einschließlich
/home/myself/mycode.html
und/tmp/84d8da9/dangerous_trojan.html
teilen sich die gleiche Domäne: die Festplatte. Wenn IE dies ermöglicht, dann sollte es als bug. Tatsächlich null Herkunft (die Platte) selbst verbietet normalen nicht-CORS xmlHTTPrequest.Einige Browser sogar noch weiter gehen in nicht erlaubt lokale domains wie
localhost
oder127.0.0.1
oder::1
zu machen CORS-Anfragen. So ist es nicht genug, um einfach zu bedienen die Seite von einem server.Den work-around ist, geben Sie Ihrer Seite einen domain-Namen. Zum Zweck der Entwicklung, die Sie nicht haben, kaufen Sie einen domain-Namen. Reicht es aus, ändern Sie die
hosts
Datei von der Maschine, die Ihr browser auf.Vielleicht habe ich deine Frage missverstanden. Wenn Sie nicht versuchen, einen CORS-request dann wird der Fehler einfach durch die same-origin-policy (die CORS soll work-around). So die Lösung ist, einfach stellen Sie sicher, dass die web-Seite und ajax-Quelle sind beide von derselben Domäne aus bereitgestellt. Regelmäßige non-CORS ajax funktioniert auf lokalen domains so stellen Sie sicher, dass Ihre web-Seite und die ajax-Quelle diente entweder aus
http://localhost/
oderhttp://localhost:8984/
. Wenn Sie möchtenlocalhost
in der Lage sein, um ajax-requests zulocalhost:8984
müssen Sie implementieren, CORS auf derlocalhost:8984
server.