J'essaie de faire une simple demande d'origine croisée, et Firefox la bloque systématiquement avec cette erreur:
Requête inter-origine bloquée: la même politique d'origine interdit la lecture de la ressource distante à [url]. Cela peut être résolu en déplaçant la ressource vers le même domaine ou en activant CORS. [url]
Cela fonctionne bien dans Chrome et Safari.
Pour autant que je sache, j'ai défini tous les en-têtes corrects sur mon PHP pour permettre à cela de fonctionner. Voici ce avec quoi mon serveur répond
HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
J'ai essayé d'utiliser Angular, jQuery et un objet XMLHTTPRequest de base, comme ceci:
var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
... et cela fonctionne dans tous les navigateurs sauf Firefox. Quelqu'un peut-il aider avec ça?
javascript
firefox
cors
cross-domain
Godwhacker
la source
la source
mozSystem
n'est pas pris en charge pour les sites Web réguliers, mais uniquement pour les applications firefox-os , alors supprimez cette option.Accept application/json, text/plain, */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length 35
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host [url]
Origin [url]
Referer [referrer url]
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0
Erreur:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [url]. This can be fixed by moving the resource to the same domain or enabling CORS. [url]
Réponses:
Il s'avère que cela n'a rien à voir avec CORS - c'était un problème avec le certificat de sécurité. Erreurs trompeuses = 4 heures de maux de tête.
la source
withCredentials=true
sur l'instance XHR; sinon, Firefox n'a pas réussi à utiliser le certificat client lors de la demande (fonctionnait bien dans Chrome, cependant).Je suis tombé sur cette question après avoir trouvé que les demandes dans Firefox étaient bloquées avec le message:
Après m'être arraché les cheveux, j'ai découvert qu'une extension Firefox nouvellement installée, Privacy Badger, bloquait les demandes.
Si vous arrivez à cette question après vous être gratté la tête, essayez de vérifier les extensions que vous avez installées pour voir si l'une d'entre elles bloque les demandes.
Voir Raison: la demande CORS n'a pas abouti sur MDN pour plus de détails.
la source
J'ai trouvé que mon problème était que le serveur auquel j'ai envoyé la demande croisée avait un certificat qui n'était pas fiable.
Si vous souhaitez vous connecter à un domaine croisé avec
https
, vous devez d'abord ajouter une exception pour ce certificat.Vous pouvez le faire en visitant le lien bloqué une fois et en ajoutant l'exception.
la source
J'ai trouvé une solution après 2 jours :(.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
la source
Si vous n'avez pas de certificat `` réel '' (et que vous utilisez donc un certificat auto-signé), dans FireFox vous pouvez aller à:
Là, remplissez l'emplacement, par exemple: https: //wwww.myserver: myport
la source
Juste un mot d'avertissement. J'ai finalement contourné le problème avec Firefox et CORS.
La solution pour moi était ce post
Définition de CORS (partage de ressources cross-origin) sur Apache avec des en-têtes de réponse corrects permettant tout | Benjamin Horn
Cependant, Firefox se comportait vraiment, vraiment étrange après avoir défini ces en-têtes sur le serveur Apache (dans le dossier .htaccess).
J'ai ajouté beaucoup de
console.log("Hi FF, you are here A")
etc pour voir ce qui se passait.Au début, on aurait dit qu'il était accroché
xhr.send()
. Mais ensuite, j'ai découvert qu'il n'était pas arrivé à cette déclaration. J'en ai placé un autreconsole.log
juste avant et je n'y suis pas arrivé - même s'il n'y avait rien entre le dernierconsole.log
et le nouveau. Ça s'est juste arrêté entre deuxconsole.log
.Réorganiser les lignes, supprimer, pour voir s'il y avait un caractère étrange dans le fichier. Je n'ai rien trouvé.
Le redémarrage de Firefox a résolu le problème.
Oui, je devrais signaler un bug. C'est juste que c'est si étrange alors je ne sais pas comment le reproduire.
AVIS : Et, oh, j'ai juste fait les
Header always set
parties, pas laRewrite*
partie!la source
Il suffit d'ajouter
dans le
.htaccess
fichier à la racine du site Web auquel vous essayez de vous connecter.la source
Pour la postérité, vérifiez également les journaux du serveur pour voir si la ressource demandée renvoie un 200.
J'ai rencontré un problème similaire, où tous les en-têtes appropriés étaient renvoyés dans la demande ajax de pré-vol, mais le navigateur a signalé que la demande réelle était bloquée en raison de mauvais en-têtes CORS.
Il s'avère que la page demandée renvoyait une erreur 500 en raison d'un code incorrect, mais uniquement lorsqu'elle a été récupérée via CORS. Le navigateur (Chrome et Firefox) a signalé par erreur que l'en-tête Access-Control-Allow-Origin était manquant au lieu de dire que la page avait renvoyé un 500.
la source
Essayez ceci, cela devrait résoudre votre problème
Dans votre config.php, ajoutez www pre dans votre domaine.com. Par exemple:
Ajoutez ceci à votre fichier .htaccess
la source
Pour moi, il s'avère que je définissais l'en-
Access-Control-Allow-Origin
tête de réponse sur un spécifique (et le correct),host.com
mais il a dû être retourné comme à lahttp://host.com
place. Que fait Firefox? Il avale silencieusement la requête GET et renvoie un statut 0 au XHR, sans aucune sortie d'avertissement vers la console javascript, alors que pour d'autres échecs similaires, il dirait au moins quelque chose. Ai ai.la source
Pour déboguer, vérifiez les journaux du serveur si possible. Firefox renvoie des erreurs CORS dans la console pour toute une série de raisons.
L'une des raisons est également le plugin uMatrix (et je suppose que NoScript et similaire).
la source
J'ai rencontré un problème similaire, et je pense qu'il est valable d'être enregistré comment je l'ai résolu:
J'ai un système construit essentiellement sur Symfony 3. Pour des raisons d'auto-apprentissage et de performance, j'ai décidé d'écrire quelques scripts en utilisant GoLang, également, une API avec un accès public.
My Go API attend des paramètres de format Json et renvoie également une réponse au format Json
Pour appeler ces GoApi que j'utilise le plus, $ .ajax (jQuery) Le premier test était une tromperie: le (non) célèbre pop-up "Cross-Origin Request Blocked"! Ensuite, j'ai essayé de définir "Access-Control-Allow-Origin: *" sur apache conf, htaccess, php, javascript et partout où je pourrais trouver sur google!
Mais même erreur frustrante !!!
La solution était simple: je devais faire des requêtes "POST" au lieu de "GET".
Pour y parvenir, j'ai dû ajuster à la fois GoLang et JavaScript pour utiliser GET! Une fois que c'est fait, plus aucune demande Cross-Origin bloquée pour moi !!!
J'espère que ça aide
PS:
J'utilise apache et Vhost, sur le bloc d'annuaire que j'ai
N'oubliez pas: "*" signifie que vous accepterez les demandes de n'importe qui !!! (Ce qui peut être un manque de sécurité) Dans mon cas, ça va, car ce sera une API publique
PS2: Mes en-têtes
En-têtes de réponse
Demander des en-têtes (469 B)
la source
Si les réponses ci-dessus ne vous aident pas, vérifiez si le serveur backend est opérationnel ou non, car dans mon cas, le serveur s'est écrasé et cette erreur s'avère totalement trompeuse.
la source
Dans mon cas c'était mon ADBLOCKER ! Pour une raison quelconque, il a été activé sur mon hôte local et a provoqué cette erreur dans Firefox.
Le désactiver ou désinstaller le plugin devrait résoudre ce problème.
Dans votre cas, ce n'est peut-être pas un adblocker mais un autre plugin Firefox. Testez-le d'abord en mode incognito sans plugins pour déterminer si c'est le problème, puis désactivez systématiquement les plugins jusqu'à ce que vous trouviez le coupable.
la source
Les fichiers sont explicites. Créez un fichier, appelez-le comme vous le souhaitez. Dans mon cas, jq2.php.
Maintenant, nous allons inclure un moteur, créer un fichier, l'appeler comme vous le souhaitez. Dans mon cas, c'est gs.php.
J'ai essayé de garder l'exemple aussi simple que possible. Et comme il exécute le lien à chaque pression de touche, le quota de votre API sera consommé assez rapidement.
Bien sûr, il n'y a pas de fin à ce que nous pouvons faire, comme placer les données dans une table, envoyer à la base de données, etc.
la source