Ich verwende .htaccess, um URLs neu zu schreiben, und ich habe das HTML-Basistag verwendet, damit es funktioniert.
Wenn ich jetzt versuche, eine Ajax-Anfrage zu stellen, wird folgende Fehlermeldung angezeigt:
XMLHttpRequest kann nicht geladen werden
http://www.example.com/login.php
. In der angeforderten Ressource ist kein Header 'Access-Control-Allow-Origin' vorhanden. Origin 'http://example.com
' ist daher kein Zugriff gestattet.
javascript
jquery
ajax
cors
xmlhttprequest
Th3lmuu90
quelle
quelle
http://wordicious.com
ist eine andere Domäne alshttp://www.wordicious.com/
, daher der Fehler. Übrigens, wenn es jetzt funktioniert und von selbst zurückgekommen ist, sollten Sie die Frage wahrscheinlich löschen.Antworten:
Verwenden Sie
addHeader
anstelle dersetHeader
Methode,*
in der obigen Zeile wird erlaubenaccess to all domains
.Zum Zulassen
access to specific domain only
:Überprüfen Sie dies
blog post
.quelle
Warum der Fehler ausgelöst wird:
JavaScript-Code ist durch die Richtlinie mit demselben Ursprung begrenzt. Dies bedeutet, dass Sie von einer Seite unter
www.example.com
nur (AJAX) Anforderungen an Dienste stellen können, die sich in genau derselben Domäne befinden, in diesem Fall genauwww.example.com
( nichtexample.com
- ohnewww
- oderwhatever.example.com
).In Ihrem Fall versucht Ihr Ajax-Code, einen Dienst
http://wordicious.com
von einer Seite unter zu erreichenhttp://www.wordicious.com
.Obwohl sie sehr ähnlich sind, sind sie nicht dieselbe Domäne. Und wenn sie sich nicht in derselben Domäne befinden, ist die Anforderung nur dann erfolgreich, wenn die Antwort des Ziels einen
Access-Control-Allow-Origin
Header enthält .Da Ihre Seite / Ihr Dienst
http://wordicious.com
unter nie für die Darstellung eines solchen Headers konfiguriert wurde, wird diese Fehlermeldung angezeigt.Lösung:
Wie gesagt, der Ursprung (wo sich die Seite mit JavaScript befindet) und die Zieldomänen (wo das JavaScript versucht zu erreichen) müssen exakt gleich sein.
Ihr Fall scheint ein Tippfehler zu sein. Sieht aus wie
http://wordicious.com
undhttp://www.wordicious.com
sind eigentlich der gleiche Server / Domain. Um dieshttp://www.wordicious.com
http://wordicious.com
zu beheben, geben Sie das Ziel und den Ursprung gleichermaßen ein: Lassen Sie Ajax-Code Seiten / Dienste nicht anfordern . (Platzieren Sie die Ziel-URL möglicherweise relativ'/login.php'
ohne die Domain).Allgemeiner gesagt:
Wenn das Problem nicht ein Tippfehler ist wie derjenige diese Frage zu sein scheint, wäre die Lösung zu sein , die hinzufügen ,
Access-Control-Allow-Origin
in die Zieldomäne . Das Hinzufügen hängt natürlich vom Server / der Sprache ab, die hinter dieser Adresse steht. Manchmal reicht eine Konfigurationsvariable im Tool aus. In anderen Fällen müssen Sie die Header selbst über Code hinzufügen.quelle
Für .NET Server kann dies in web.config wie unten gezeigt konfiguriert werden
Angenommen, die Serverdomäne lautet http://live.makemypublication.com und der Client lautet http://www.makemypublication.com. Dann konfigurieren Sie sie in der web.config des Servers wie folgt
quelle
Wenn Sie diese Fehlermeldung vom Browser erhalten:
Wenn Sie versuchen, eine Ajax POST / GET-Anforderung an einen Remote-Server zu senden, auf den Sie keinen Einfluss haben, vergessen Sie bitte diese einfache Lösung:
Was Sie wirklich tun müssen, insbesondere wenn Sie nur JavaScript verwenden, um die Ajax-Anforderung auszuführen, ist ein interner Proxy, der Ihre Anfrage entgegennimmt und an den Remote-Server weiterleitet.
Führen Sie zunächst in Ihrem JavaScript einen Ajax-Aufruf an Ihren eigenen Server durch.
Erstellen Sie dann eine einfache PHP-Datei mit dem Namen proxy.php, um Ihre POST-Daten zu verpacken und als Parameter an den Remote-URL-Server anzuhängen. Ich gebe Ihnen ein Beispiel, wie ich dieses Problem mit der Expedia Hotel-Such-API umgehen kann:
Indem Sie Folgendes tun:
Sie führen nur die gleiche Abfrage durch, aber auf der Serverseite, und danach sollte es gut funktionieren.
quelle
Sie müssen dies am Anfang Ihrer PHP-Seite "login.php" hinzufügen.
quelle
Sie müssen die Header-Schlüssel / -Werte in die Antwort der Optionsmethode einfügen. Wenn Sie beispielsweise eine Ressource unter http://mydomain.com/myresource haben , schreiben Sie in Ihren Servercode
quelle
Ändern Sie grundsätzlich die Antwort des API-Headers, indem Sie die folgenden zusätzlichen Parameter hinzufügen.
Access-Control-Allow-Credentials: true
Zugriffskontrolle-Zulassen-Ursprung: *
Dies ist jedoch keine gute Lösung, wenn es um die Sicherheit geht
quelle
Die Problemumgehung besteht darin, einen Reverse-Proxy zu verwenden, der auf Ihrem Quellhost ausgeführt und an Ihren Zielserver weitergeleitet wird, z. B. Fiddler:
Link hier: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy
Oder ein Apache Reverse Proxy ...
quelle
Fügen Sie dies Ihrer PHP-Datei oder Ihrem Hauptcontroller hinzu
quelle
header("Access-Control-Allow-Credentials: true");
Gelöst mit dem folgenden Eintrag in httpd.conf
quelle
Bitte finden Sie die in XMLHTTPREQUEST in Javascript verwendete Funktion zum Einrichten der Anforderungsheader.
Referenz: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader
quelle