XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Ich habe über domänenübergreifende Ajax-Anfragen gelesen und verstehe das zugrunde liegende Sicherheitsproblem. In meinem Fall werden 2 Server lokal ausgeführt und möchten domänenübergreifende Anforderungen während des Testens aktivieren.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Ich stelle eine Ajax-Anfrage an, localhost:8080 - GAE server
während meine Seite vom Knotenserver geladen wird. Was ist das einfachste und sicherste (Sie möchten Chrome nicht mit der disable-web-security
Option starten ). Wenn ich mich ändern muss 'Content-Type'
, sollte ich es auf dem Knotenserver tun? Wie?
Antworten:
Da sie auf verschiedenen Ports ausgeführt werden, handelt es sich um unterschiedliches JavaScript
origin
. Es spielt keine Rolle, dass sie sich auf demselben Computer / Hostnamen befinden.Sie müssen CORS auf dem Server aktivieren (localhost: 8080). Schauen Sie sich diese Seite an: http://enable-cors.org/
Sie müssen dem Server lediglich einen HTTP-Header hinzufügen:
Oder der Einfachheit halber:
Denken Sie, verwenden Sie nicht "*", wenn Ihr Server versucht, ein Cookie zu setzen, und Sie verwenden
withCredentials = true
Sie können mehr über lesen
withCredentials
hierquelle
Access-Control-Allow-Origin
Header ein zusätzlicher Header zu den vom Server gesendeten HTTP-Antworten sein muss. Dieser Header muss Teil der Antwort des Servers sein, er muss nicht Teil der Clientanforderung sein . Insbesondere passiert, bevor der Client die gewünschte Anfrage stellt, der Browser eineOPTIONS
Anfrage vor sich sendet und wenn die Antwort des Servers auf dieseOPTIONS
Anfrage nicht den Header enthält, sendet der Browser Ihre gewünschte Anfrage nicht.Wenn Sie für Ajax-Anfragen eine schnelle Lösung in Chrome benötigen, können Sie mit diesem Chrome-Plugin automatisch von jeder Quelle aus auf jede Site zugreifen, indem Sie den richtigen Antwortheader hinzufügen
Chrome-Erweiterung Allow-Control-Allow-Origin: *
quelle
Sie müssen CORS aktivieren, um dies zu lösen
wenn Ihre App mit einfachen node.js erstellt wurde
Stellen Sie es in Ihren Antwortheadern wie ein
wenn Ihre App mit Express-Framework erstellt wurde
Verwenden Sie eine CORS-Middleware wie
und bewerben Sie sich über
Hier sind zwei Referenzlinks
quelle
config.allowedDomains
. Sag in meinem Fall, welche Uri soll ich dort setzen?*
oder diespecific domain
Sie Zugriff gewähren möchten.app.configure()
ist kein Funktionsfehler?Ich akzeptiere die Antwort von @Rocket Hazmat, da sie mich zur Lösung führt. Es war in der Tat auf dem GAE-Server, den ich brauchte, um den Header zu setzen. Ich musste diese einstellen
Einstellung
"Access-Control-Allow-Origin"
gab nur FehlerWenn ein Authentifizierungstoken gesendet werden muss, fügen Sie dies ebenfalls hinzu
Auch beim Kunden einstellen
withCredentials
Dadurch werden 2 Anforderungen an den Server gesendet, eine mit
OPTIONS
. Auth-Cookie wird nicht mitgesendet, daher muss außerhalb von auth behandelt werden.quelle
Fügen Sie in router.js einfach Code hinzu, bevor Sie get / post-Methoden aufrufen. Es funktioniert bei mir ohne Fehler.
quelle
Ich hatte ein Problem beim Aufrufen einer Cross-Origin-Ressource mit Ajax aus Chrome.
Ich habe Node JS und den lokalen HTTP-Server verwendet, um meine Node JS-App bereitzustellen.
Ich habe eine Fehlerantwort erhalten, als ich auf eine Cross-Origin-Ressource zugegriffen habe
Ich habe eine Lösung dafür gefunden,
1) Ich habe meiner app.js-Datei folgenden Code hinzugefügt
2) In meiner HTML-Seite namens Cross-Origin-Ressource mit
$.getJSON();
quelle
Wenn Sie Express verwenden, können Sie die cors-Middleware wie folgt verwenden:
quelle
Fügen Sie dies Ihrem NodeJS-Server unter den folgenden Importen hinzu:
quelle
Wenn Sie danach 403 erhalten haben, reduzieren Sie bitte die Filter in der WEB.XML-Tomcat-Konfiguration auf Folgendes:
quelle
Ich habe endlich die Antwort für Apache Tomcat8 bekommen
Sie müssen die Datei tomcat web.xml bearbeiten.
wahrscheinlich wird es im webapps Ordner sein,
finde es und bearbeite es
Dies ermöglicht Access-Control-Allow-Origin allen Hosts. Wenn Sie es von allen Hosts auf nur Ihren Host ändern müssen, können Sie das bearbeiten
obiger Code von * zu Ihrem http: // your_public_IP oder http://www.example.com
Sie können hier auf die Dokumentation zum Tomcat-Filter verweisen
Vielen Dank
quelle
Hallo, dies ist der Weg, um das CORS-Problem im Knoten zu lösen. Fügen Sie einfach diese Zeilen auf der Seite "api" des Servers in Node.js (oder in Ihrer Server-Datei) hinzu, bevor Sie sicherstellen, dass "cors" installiert wird.
quelle
benutze dataType: 'jsonp', funktioniert bei mir.
quelle
Verwenden Sie dies für PHP, um Header festzulegen.
quelle
Fügen Sie dies zu Ihren Routen hinzu, die Sie vom Front-End aus anrufen. Wenn Sie beispielsweise http: // localhost: 3000 / users / register aufrufen , müssen Sie dieses Codefragment in Ihre Back-End-JS-Datei einfügen, die diese Route enthält.
quelle
Wenn Sie nach der Lösung suchen und Express hier verwenden, ist dies die schnelle Lösung.
1) Installieren Sie cors mit npm
npm install cors --save
2) importiere es [erforderlich]
const cors = require('cors')
3) Verwenden Sie es als Middleware
app.use(cors())
Einzelheiten und Verwendung von Cors . Das ist es, hoffentlich funktioniert es.
quelle
Wenn Sie sich in Google Chrome befinden, installieren Sie dieses Add-On:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related
quelle