L'origine n'est pas autorisée par Access-Control-Allow-Origin
Je suis en train de faire un Ajax.request
à distance à un serveur PHP dans un Sencha Touch 2 application (enveloppé dans PhoneGap).
La réponse du serveur est la suivante:
XMLHttpRequest ne peut pas charger http://nqatalog.negroesquisso.pt/login.php. Origine
http://localhost:8888
n'est pas autorisé par Access-Control-Allow-Origin.
Comment puis-je résoudre ce problème?
- alors que l'aide de jQuery, réglage
dataType: 'jsonp',
fait le tour - par la façon qui n'est pas la réponse du serveur. Pour être précis, que l'erreur est émis sur le côté client.
- Le jsonp trick sans doute ne fonctionne plus, pour info: stackoverflow.com/questions/12216208/...
- Remarque, car je viens de perdre une demi-journée à chasser ce bug - Si le côté serveur script échoue avec une erreur interne du serveur, le navigateur peut l'interpréter comme si la demande n'a pas permis en raison de
Access-Control-Allow-Origin
et de faire rapport à ce que l'erreur. - Il y a une extension pour ça!
- Vous avez juste a sauvé ma vie. J'ai été à la recherche pour certains de la SCRO erreur depuis 3 jours, et c'était tout simplement un peu de configuration Spring problème à l'origine de 500, que j'ai résolu en 5 minutes une fois que j'ai lu votre commentaire et j'ai effectivement cherché. Merci!!!!
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un article sur cette question pendant un certain temps, Croix de Domaine AJAX.
La façon la plus simple de gérer cela si vous avez le contrôle de la réponse du serveur est d'ajouter un en-tête de réponse pour:
Cela permettra à la croix-domaine Ajax. En PHP, vous aurez envie de modifier la réponse de la sorte:
Vous pouvez simplement mettre les
Header set Access-Control-Allow-Origin *
paramètre dans le Apache de configuration ou fichier htaccess.Il convient de noter que cela permet de désactiver la protection de la SCRO, qui très probable expose à vos utilisateurs d'attaque. Si vous ne savez pas que vous avez spécifiquement besoin d'utiliser un caractère générique, vous ne devriez pas l'utiliser, et au lieu de cela, vous devriez liste blanche de votre domaine spécifique:
Si vous ne pas ont le contrôle du serveur, vous pouvez simplement ajouter cet argument à votre lanceur d'applications google Chrome:
--disable-web-security
.Remarque que je ne voudrais pas utiliser ce normal de "surfer sur le web". Pour référence, voir ce post: Désactiver la même origine dans Chrome.
Vous pouvez utiliser Phonegap pour construire l'application et l'installer sur l'appareil, ce ne sera pas un problème.
Si vous utilisez Apache juste ajouter:
dans votre configuration. Ce sera la cause de toutes les réponses de votre serveur pour être accessible à partir de tout autre site sur l'internet. Si vous avez l'intention d'autoriser uniquement les services de votre hôte pour être utilisé par un serveur spécifique, vous pouvez remplacer la
*
avec l'URL du serveur d'origine:Si vous avez un ASP.NET /ASP.NET MVC application, vous pouvez inclure cet en-tête via le Web.fichier de configuration:
C'était la première question/réponse qui est apparu pour moi, en essayant de résoudre le même problème en utilisant ASP.NET MVC comme la source de mes données. Je me rends compte que cela ne suffit pas à résoudre le PHP question, mais il est lié assez pour être utile.
Je suis en utilisant ASP.NET MVC. Le blog de Greg Brant a fonctionné pour moi. En fin de compte, vous créez un attribut,
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
, que vous êtes en mesure d'ajouter aux actions de contrôleur.Par exemple:
Et ensuite de l'utiliser avec:
Comme Matt Mombrea est correct pour le côté serveur, vous pouvez exécuter dans un autre problème qui est des listes d'autorisation de rejet.
Vous devez configurer votre phonegap.plist. (Je suis en utilisant une ancienne version de phonegap)
Pour cordova, il pourrait y avoir quelques changements dans le nommage et d'annuaire. Mais la procédure doit être essentiellement les mêmes.
D'abord sélectionner les fichiers > PhoneGap.plist
puis sous "ExternalHosts"
Ajouter une entrée, d'une valeur de peut-être "http://nqatalog.negroesquisso.pt"
Je suis à l'aide de * à des fins de débogage seulement.
Cela peut être pratique pour ceux qui ont besoin d'une exception pour les " www " et " non-www versions d'un référent:
Je vais vous donner une solution simple pour celui-ci. Dans mon cas, je n'ai pas accès à un serveur. Dans ce cas, vous pouvez modifier la stratégie de sécurité de votre Google Chrome navigateur pour permettre Access-Control-Allow-Origin. C'est très simple:
Simple coller dans
"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
.L'emplacement peut varier. Maintenant, ouvrez google Chrome en cliquant sur ce raccourci.
Que j'ai pu croiser à quelques reprises lorsque l'on travaille avec différentes Api. Souvent une solution rapide consiste à ajouter "&callback=?" à la fin d'une chaîne. Parfois, le commercial doit être un code de caractère, et parfois un "?": "?rappel=?" (voir Les prévisions.io Utilisation de l'API avec jQuery)
Si vous êtes en train de rédiger une Extension Chrome et vous obtenez cette erreur, alors assurez-vous d'avoir ajouté l'API de base de l'URL de votre
manifest.json
's les autorisations de bloc, exemple:si vous êtes sous apache, il suffit d'ajouter le .fichier htaccess dans votre répertoire avec ce contenu:
C'est à cause de de même la politique de l'origine. Voir plus à Mozilla Developer Network ou Wikipédia.
Pour l'essentiel, dans votre exemple, vous devez charger le
http://nqatalog.negroesquisso.pt/login.php
page denqatalog.negroesquisso.pt
, paslocalhost
.Dans Ruby on Rails, vous pouvez le faire dans un contrôleur:
Vous pouvez le faire fonctionner sans modifiying le serveur en faisant le navigateur, y compris l'en-tête
Access-Control-Allow-Origin: *
dans les OPTIONS HTTP réponses.Dans Chrome, utilisez cette extension. Si vous êtes sur Mozilla vérifier cette réponse.
Si vous obtenez ce dans Angular.js, alors assurez-vous de vous échapper de votre numéro de port comme ceci:
Voir ici pour plus d'info sur elle.
Nous avons également le même problème avec l'application phonegap testé dans chrome.
Une machine windows, nous utilisons ci-dessous fichier de commandes tous les jours avant l'Ouverture de google Chrome.
Rappelez-vous, avant d'exécuter ce que vous devez nettoyer toutes les instance de google chrome à partir du gestionnaire des tâches ou vous pouvez sélectionner chrome pour ne pas s'exécuter en arrière-plan.
LOT: (cmd)
En Ruby Sinatra
pour tout le monde ou
Lorsque vous recevez la demande, vous pouvez
que lorsque vous avez la réponse aller avec quelque chose comme ça: