Frage

Ich habe auf einem Server (Jetty mit dem CrossOriginFilter) bis Cross-Origin Resource Sharing gesetzt und es funktioniert perfekt auf IE8 und Firefox. Auf Chrome, es ist nur ... nicht.

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

Die Fehlerfunktion wird aufgerufen, mit der hilfreichen Meldung „Fehler“. Es scheint, die Anfrage zu machen, aber ohne die Headern würden Sie erwarten. Wenn die URL aus dem gleichen Ursprung ist, es funktioniert gut.

War es hilfreich?

Lösung 3

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

Andere Tipps

Ich habe mein Problem auf diese Weise gelöst:

Fügen Sie diese auf Ihren PHP-Code:

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 auf Ihre Antwort.

. Problem: Der Browser fragt an den Server für Optionen vor Ihrem Hauptantrag, um zu überprüfen, ob die Website die Möglichkeit hat, Komunikation mit unterschiedlicher Herkunft zu ermöglichen, und dann, wenn ja, sie tun, um Ihre POST oder GET-Anforderung

EDIT: Versuchen Sie, diese (ohne Hack), um zu sehen, ob Sie Daten empfangen ...

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

Es sieht aus wie das ursprüngliche Plakat ihrer Ausgabe haben beschlossen, aber für jemand das gleiche Problem wie commentor Elisabeth hat, glaube ich, das Problem sein kann, dass Chrome ein ein Origin-Header zu setzen weigert sich, für ein CORS beantragen, wenn Sie das ausführen Anfrage von einer lokalen Datei. Es wird nicht einmal lassen Sie explizit die Origin-Header außer Kraft setzen. Dies bewirkt, dass der Server sehen, „Origin: null“, die Ergebnisse in einem 403 in den meisten Fällen. Firefox hat offenbar keine solche Einschränkung, wie ich nach viel Haareziehen gefunden haben.

Wenn Sie unbedingt brauchen Chrome in diesem Fall zu verwenden, können Sie Ihr Problem lösen, indem Sie einen Webserver lokal ausgeführt wird und immer die Dateien über http Zugriff auf: Statt über Datei:.

In meinem Fall ist es localhost: 8001 (das Front-End), die die APIs auf localhost zu nennen versucht: 7001 (auf server.js als Node-Server). Auch hatte ich die CORS-Plugin installiert und eingeschaltet auf Chrome, noch die CORS Politik abgelehnt, sie als Preflight-Fälle.

Es dauerte mehr als ein halber Tag, um endlich das Problem zu beheben. Hier sind die „dummen“ Schritte, es glauben oder nicht:

i. Schalten Sie das CORS-Plugin, laden Sie die App, zu diesem Zeitpunkt sollten Sie noch die Fehler erhalten, die richtig sind.

ii. Schalten Sie es wieder, laden Sie die App, wenn die APIs erfolgreich sind, stoppen Sie hier, keine Notwendigkeit, iii, um fortzufahren.

iii. Allerdings, wenn Sie immer noch die CORS Ablehnung bekommen, dann deinstallieren Chrome und installieren Sie eine up-to-date Chrome.

iv. Auf dem neuen Chrome, die zuvor installierten CORS-Plugin noch da sein sollte, aber mit OFF-Status.

v. Die Seite neu laden, sollten Sie die CORS Ablehnung Nachrichten auf der Konsole erhalten, die richtig ist.

vi. Schalten Sie es wieder, die Seite neu laden, sollten die Fehler verschwinden.

Keine weiteren Ideen, wenn die obigen Schritte immer noch keine Arbeit in Ihrem Fall.

Ich habe versucht, auch die folgenden auf server.js (Node) und immer noch nicht arbeiten, stören so nicht versuchen:

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

Wenn ich das Chrom aktualisiert ich das Problem konfrontiert war, habe ich es gelöst Google Extension "Access-Control-Allow-Credentials" eine neue Version. wenn es eine alte Version ist, werden Sie nicht auf einer neuen Google Chrome-Version arbeiten müssen

https://chrome.google .com / webstore / detail / Access-Control-allow-cred / hmcjjmkppmkpobeokkhgkecjlaobjldi? hl = en

Überprüfen Sie, dass Sie Ihren Server auf beide nicht gesetzt erlaubten Anmeldeinformationen und setzen den Ursprung Header * ermöglichen. Wie unten:

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

Wenn der Server diese Werte für diesen Header zurückkehrt, dann wird es nicht funktionieren. Wenn Sie Access-Control-Allow-Credentials auf true gesetzt, dann können Sie nicht verwenden *as der Wert des Access-Control-Allow-Origin-Header. Es folgt ein Auszug aus der 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 die oben der Fall ist, setzen Sie einfach Access-Control-Allow-Credentials zu false.

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

Referenzen

CORS wird in Chrom arbeiten. Verwenden Sie einfach Chrom safe-mode ist, das heißt, verwenden Sie deaktivieren die Sicherheitseinstellungen. Google es darüber, oder Sie können auch von der Kommandozeile starten auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top