Question

Je l'ai mis en place le partage des ressources Cross-Origin sur un serveur (jetée à l'aide du CrossOriginFilter) et il fonctionne parfaitement sur IE8 et Firefox. Chrome, juste ... ne fonctionne pas.

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

La fonction d'erreur est invoquée, le message utile « erreur ». Il semble faire la demande, mais sans les en-têtes que vous attendez. Si l'URL est de la même origine, il fonctionne très bien.

Était-ce utile?

La solution 3

ce qui a finalement fonctionné pour moi est xhr.setRequestHeader('Content-Type', 'text/plain');

Autres conseils

J'ai résolu mon problème de cette façon:

Ajouter à votre code PHP:

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");

Ou ajouter ces en-têtes à votre réponse.

Problème:. Les navigateurs demandent au serveur pour les options avant votre demande principale, pour vérifier si le site a la possibilité d'autoriser comunication avec origine différente, et si oui, ils font votre POST ou GET demande

EDIT: Essayez ceci (sans votre hack) pour voir si vous recevez des données ...

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

Il ressemble à l'affiche d'origine peut avoir résolu leur problème, mais pour toute personne ayant la même question que commentor Elisabeth, je crois que le problème peut être que Chrome refuse de mettre un en-tête d'origine pour une CORS demande si vous exécutez la demander à un fichier local. Il ne sera même pas vous laisser passer outre explicitement l'en-tête d'origine. Cela provoque le serveur pour voir « Origine: null », qui se traduit par un 403 dans la plupart des cas. Firefox n'a apparemment pas cette contrainte, comme je l'ai trouvé après beaucoup de cheveux tirant.

Si vous absolument besoin d'utiliser Chrome dans ce cas, vous pouvez résoudre votre problème en exécutant un serveur web local et accéder à toujours votre fichier via http: au lieu de via le fichier:.

Dans mon cas, il est localhost: 8001 (la fin de l'avant) qui tente d'appeler les API à localhost: 7001 (sur server.js comme serveur de nœud). Même j'avais CORS plugin installé et activé sur Chrome, toujours la politique CORS les a rejetés comme des cas prévol.

Il m'a fallu plus d'une demi-journée pour finalement résoudre le problème. Voici les étapes « stupides », croyez-le ou non:

i. Éteignez le plugin CORS, rechargent l'application, à ce moment, vous devriez toujours obtenir les erreurs qui sont correctes.

ii. Rallumez-le, rechargez l'application, si les API réussissent, arrêt ici, pas besoin de procéder à iii.

iii. Toutefois, si vous obtenez toujours le rejet de CORS, puis désinstaller Chrome et d'installer une mise à jour Chrome.

iv. Sur le nouveau Chrome, le plug-in CORS précédemment installé devrait encore être là, mais avec l'état OFF.

v. Recharger la page, vous devriez obtenir les messages de rejet de CORS sur la console qui sont corrects.

vi. Rallumez-le, recharger la page, les erreurs devraient disparaître.

Pas d'autres idées si les étapes ci-dessus ne fonctionnent toujours pas dans votre cas.

J'ai aussi essayé ce qui suit sur server.js (node) et encore ne fonctionnent pas, donc pas la peine d'essayer:

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

Quand je mis à jour le chrome je faisais face à ce problème, je l'ai résolu Google Extension « Access-Control-Allow-pouvoirs » nouvelle version. si elle est une ancienne version, vous ne devez travailler sur une nouvelle version de Google Chrome

https://chrome.google .com / webstore / detail / contrôle d'accès permettent aux-cred / hmcjjmkppmkpobeokkhgkecjlaobjldi? hl = fr

Assurez-vous que vous n'avez pas configuré votre serveur à la fois les informations d'identification permettent et de définir l'en-tête permettent d'origine *. Comme ci-dessous:

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

Si votre serveur renvoie ces valeurs pour ces en-têtes, il ne fonctionnera pas. Si vous définissez Access-Control-Allow-Credentials à true, alors vous ne pouvez pas utiliser *as la valeur de l'en-tête de Access-Control-Allow-Origin. Voici un extrait des webdocs l'en-tête MDN ( 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.

Si ce qui précède est le cas, Access-Control-Allow-Credentials simplement mis à false.

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

Références

CORS travaillera en chrome. Il suffit d'utiliser le chrome est en mode sécurité, à savoir, utilisez désactiver les paramètres de sécurité. Google-il, ou vous pouvez même commencer à partir de la ligne de commande aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top