Ich mache eine Verbindung Ajax.request
zu einem Remote-PHP-Server in einer Sencha Touch 2-Anwendung (in PhoneGap verpackt ).
Die Antwort vom Server lautet wie folgt:
XMLHttpRequest kann http://nqatalog.negroesquisso.pt/login.php nicht laden . Origin
http://localhost:8888
wird von Access-Control-Allow-Origin nicht zugelassen.
Wie kann ich dieses Problem beheben?
javascript
ajax
cors
xmlhttprequest
cross-domain
Ricardo
quelle
quelle
dataType: 'jsonp',
reicht die Einstellung ausAccess-Control-Allow-Origin
des Fehlers nicht zulässig, und meldet dies als Fehler.Antworten:
Ich habe vor einiger Zeit einen Artikel zu diesem Thema geschrieben, Cross Domain AJAX .
Wenn Sie die Kontrolle über den antwortenden Server haben, können Sie dies am einfachsten tun, indem Sie einen Antwortheader hinzufügen für:
Dies ermöglicht domänenübergreifendes Ajax . In PHP möchten Sie die Antwort folgendermaßen ändern:
Sie können die
Header set Access-Control-Allow-Origin *
Einstellung einfach in die Apache- Konfiguration oder die htaccess-Datei einfügen.Es sollte beachtet werden, dass dies den CORS-Schutz effektiv deaktiviert, wodurch Ihre Benutzer sehr wahrscheinlich Angriffen ausgesetzt sind . Wenn Sie nicht wissen, dass Sie speziell einen Platzhalter verwenden müssen, sollten Sie ihn nicht verwenden. Stattdessen sollten Sie Ihre spezifische Domain auf die Whitelist setzen:
quelle
Wenn Sie keine Kontrolle über den Server haben, können Sie dieses Argument einfach zu Ihrem Chrome-Starter hinzufügen :
--disable-web-security
.Beachten Sie, dass ich dies nicht für normales "Surfen im Internet" verwenden würde. Weitere Informationen finden Sie in diesem Beitrag: Deaktivieren Sie dieselbe Ursprungsrichtlinie in Chrome .
Wenn Sie Phonegap verwenden, um die Anwendung tatsächlich zu erstellen und auf das Gerät zu laden, ist dies kein Problem.
quelle
Wenn Sie Apache verwenden, fügen Sie einfach Folgendes hinzu:
in Ihrer Konfiguration. Dadurch können alle Antworten von Ihrem Webserver von jeder anderen Website im Internet aus aufgerufen werden. Wenn Sie nur zulassen möchten, dass Dienste auf Ihrem Host von einem bestimmten Server verwendet werden, können Sie die
*
durch die URL des Ursprungsservers ersetzen :quelle
Wenn Sie eine ASP.NET / ASP.NET MVC- Anwendung haben, können Sie diesen Header über die Datei Web.config einfügen:
quelle
Dies war die erste Frage / Antwort, die für mich auftauchte, als ich versuchte, dasselbe Problem mit ASP.NET MVC als Quelle meiner Daten zu lösen . Mir ist klar, dass dies die PHP- Frage nicht löst , aber es ist verwandt genug, um wertvoll zu sein.
Ich verwende ASP.NET MVC. Der Blogbeitrag von Greg Brant hat für mich funktioniert. Letztendlich erstellen Sie ein Attribut,
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
das Sie zu Controller-Aktionen hinzufügen können.Zum Beispiel:
Und dann mit:
quelle
Da Matt Mombrea für die Serverseite korrekt ist, können Sie auf ein anderes Problem stoßen, nämlich die Ablehnung der Whitelist.
Sie müssen Ihre phonegap.plist konfigurieren. (Ich benutze eine alte Version von Phonegap)
Bei Cordova gibt es möglicherweise einige Änderungen in der Benennung und im Verzeichnis. Die Schritte sollten jedoch größtenteils gleich sein.
Wählen Sie zuerst Unterstützende Dateien> PhoneGap.plist
dann unter "ExternalHosts"
Fügen Sie einen Eintrag mit dem Wert " http://nqatalog.negroesquisso.pt " hinzu. Ich verwende * nur für Debugging-Zwecke.
quelle
Dies kann für alle nützlich sein, die eine Ausnahme sowohl für "www" - als auch für "nicht www" -Versionen eines Referrers benötigen:
quelle
Ich werde Ihnen eine einfache Lösung für diese geben. In meinem Fall habe ich keinen Zugriff auf einen Server. In diesem Fall können Sie die Sicherheitsrichtlinie in Ihrem Google Chrome- Browser ändern , um Access-Control-Allow-Origin zuzulassen. Das ist sehr einfach:
Einfach einfügen
"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
.Der Standort kann abweichen. Öffnen Sie nun Chrome, indem Sie auf diese Verknüpfung klicken.
quelle
Ich bin einige Male darauf gestoßen, wenn ich mit verschiedenen APIs gearbeitet habe. Oft besteht eine schnelle Lösung darin, "& callback =?" bis zum Ende einer Zeichenfolge. Manchmal muss das kaufmännische Und ein Zeichencode sein, manchmal ein "?": "? Callback =?" (siehe Forecast.io API-Verwendung mit jQuery )
quelle
Wenn Sie eine Chrome - Erweiterung gerade schreiben und diese Fehlermeldung erhalten, dann werden Sie sicher , haben Sie die API Basis - URL zu Ihrem hinzugefügt
manifest.json
‚s Berechtigungen Block , Beispiel:quelle
Dies liegt an der Politik des gleichen Ursprungs . Weitere Informationen finden Sie im Mozilla Developer Network oder in Wikipedia .
Grundsätzlich müssen Sie in Ihrem Beispiel die
http://nqatalog.negroesquisso.pt/login.php
Seite nur von ladennqatalog.negroesquisso.pt
, nicht vonlocalhost
.quelle
Wenn Sie unter Apache stehen, fügen Sie Ihrem Verzeichnis einfach eine .htaccess-Datei mit folgendem Inhalt hinzu:
quelle
In Ruby on Rails können Sie Folgendes in einem Controller tun:
quelle
Sie können dafür sorgen, dass es funktioniert, ohne den Server zu ändern, indem Sie den Browser einschließlich des Headers erstellen
Access-Control-Allow-Origin: *
in die Antworten der HTTP-OPTIONEN einfügt.Verwenden Sie in Chrome diese Erweiterung . Wenn Sie auf Mozilla sind, überprüfen Sie diese Antwort .
quelle
Wenn Sie dies in Angular.js erhalten, stellen Sie sicher, dass Sie Ihre Portnummer wie folgt maskieren:
Sehen Sie hier für weitere Informationen über sie.
quelle
Wir haben auch das gleiche Problem mit der in Chrom getesteten Phonegap-Anwendung. Ein Windows-Computer, den wir täglich vor dem Öffnen von Chrome unter der Batch-Datei verwenden. Denken Sie daran, bevor Sie dies ausführen, müssen Sie alle Chrome-Instanzen aus dem Task-Manager bereinigen, oder Sie können Chrome auswählen, um nicht im Hintergrund ausgeführt zu werden.
BATCH: (benutze cmd)
quelle
In Ruby Sinatra
für alle oder
quelle
Wenn Sie die Anfrage erhalten, können Sie
als wenn du antworten musst, gehe mit so etwas:
quelle