wake-up-neo.net

CORS funktioniert nicht in Chrome

Ich habe Cross-Origin Resource Sharing auf einem Server (Jetty mit dem CrossOriginFilter) eingerichtet und funktioniert einwandfrei auf IE8 und Firefox. Bei Chrome ist das einfach nicht der Fall.

  $.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    dataType :  "json" } );

Die Fehlerfunktion wird mit der hilfreichen Meldung "error" aufgerufen. Es scheint, die Anfrage zu stellen, aber ohne die Header, die Sie erwarten würden. Wenn die URL aus demselben Ursprung stammt, funktioniert sie einwandfrei.

26
Malvolio

was für mich endlich funktioniert hat, ist xhr.setRequestHeader('Content-Type', 'text/plain');

11
Malvolio

Ich habe mein Problem auf diese Weise gelöst:

Fügen Sie dies Ihrem PHP Code hinzu:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");

Oder fügen Sie diese Header Ihrer Antwort hinzu.

Problem: Die Browser fragen den Server vor Ihrer Hauptanforderung nach Optionen, um zu prüfen, ob die Site die Option hat, die Kommunikation mit verschiedenen Ursprungsdaten zuzulassen. Wenn ja, wird die POST oder GET-Anforderung ausgeführt.

EDIT: Versuche dies (ohne deinen Hack), um zu sehen, ob du Daten bekommst ... 

$.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    success : function(data) {
        alert(data);
    },
    dataType :  "text"} );
22
CuSS

Es sieht so aus, als hätte das Originalposter das Problem möglicherweise gelöst, aber für jeden, der das gleiche Problem wie den Kommentator Elisabeth hat, besteht meines Erachtens das Problem, dass Chrome es ablehnt, einen Origin-Header für eine CORS-Anfrage festzulegen, wenn Sie die Anfrage von a ausführen lokale Datei. Sie können den Origin-Header auch nicht explizit überschreiben. Dadurch wird auf dem Server "Origin: null" angezeigt, was in den meisten Fällen zu 403 führt. Firefox hat anscheinend keine solche Einschränkung, wie ich nach langem Haarziehen festgestellt habe.

Wenn Sie in diesem Fall unbedingt Chrome verwenden müssen, können Sie das Problem beheben, indem Sie einen Webserver lokal ausführen und immer auf Ihre Datei über http: statt auf file: zugreifen.

12
Eric

Vergewissern Sie sich, dass Sie auf Ihrem Server nicht beide Anmeldeinformationen zugelassen haben, und setzen Sie den Header allow Origin auf *. Wie unten:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Wenn Ihr Server diese Werte für diese Header zurückgibt, funktioniert dies nicht. Wenn Sie Access-Control-Allow-Credentials Auf true setzen, können Sie * Nicht als Wert für den Header Access-Control-Allow-Origin Verwenden. Unten finden Sie einen Auszug aus den MDN-Webdocs für den Header ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin ):

For requests without credentials, the literal value "*" can be specified, as a wildcard; 
the value tells browsers to allow requesting code from any Origin to access the resource. 
Attempting to use the wildcard with credentials will result in an error.

Wenn dies der Fall ist, setzen Sie einfach Access-Control-Allow-Credentials Auf false.

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false

Verweise

0
king

In meinem Fall handelt es sich um localhost: 8001 (das Frontend), das versucht, die APIs bei localhost: 7001 (auf server.js als Knotenserver) aufzurufen. Selbst wenn ich das CORS-Plugin installiert und in Chrome aktiviert habe, lehnte es die CORS-Richtlinie als Preflight-Fälle ab.

Ich habe mehr als einen halben Tag gebraucht, um das Problem endgültig zu lösen ... Hier sind die "blöden" Schritte, ob Sie es glauben oder nicht:

ich. Schalten Sie das CORS-Plugin aus und laden Sie die App erneut. Zu diesem Zeitpunkt sollten Sie immer noch die Fehler erhalten, die korrekt sind.

ii. Schalten Sie es wieder ein, laden Sie die App erneut. Wenn die APIs erfolgreich sind, stoppen Sie hier. Sie müssen nicht weiter mit iii.

iii. Wenn Sie jedoch weiterhin die CORS-Ablehnung erhalten, deinstallieren Sie Chrome und installieren Sie ein aktuelles Chrome.

iv. Auf dem neuen Chrome sollte das zuvor installierte CORS-Plugin immer noch vorhanden sein, jedoch mit dem Status "AUS".

v. Laden Sie die Seite neu. Sie sollten die korrekten CORS-Ablehnungsnachrichten in der Konsole anzeigen.

vi. Schalten Sie es wieder ein und laden Sie die Seite erneut. Die Fehler sollten verschwinden.

Keine weiteren Ideen, wenn die oben genannten Schritte in Ihrem Fall immer noch nicht funktionieren.

Ich habe auch folgendes auf server.js (Node) ausprobiert und funktioniert immer noch nicht, also keine Mühe zu versuchen:

var app = express();
var cors = require('cors'); // Already done “npm i cors --save-dev”
app.options('*', cors());
0
Daniel C. Deng

Als ich das chrome) aktualisiert habe, war ich mit dem Problem konfrontiert. Ich habe es gelöst. Google Extension "Access-Control-Allow-Credentials" neue Version. Wenn es eine alte Version ist, werden Sie nicht brauchen um an einer neuen Google Chrome version zu arbeiten

https://chrome.google.com/webstore/detail/access-control-allow-cred/hmcjjmkppmkpobeokkhgkecjlaobjldi?hl=de