J'utilise .htaccess pour réécrire les URL et j'ai utilisé la balise de base html pour que cela fonctionne.
Maintenant, lorsque j'essaye de faire une demande ajax, j'obtiens l'erreur suivante:
XMLHttpRequest ne peut pas se charger
http://www.example.com/login.php
. Aucun en-tête «Access-Control-Allow-Origin» n'est présent sur la ressource demandée. Origin 'http://example.com
' n'est donc pas autorisé à accéder.
javascript
jquery
ajax
cors
xmlhttprequest
Th3lmuu90
la source
la source
http://wordicious.com
est un domaine différent de celuihttp://www.wordicious.com/
, d'où l'erreur. Btw, s'il fonctionne maintenant et est revenu tout seul, vous devriez probablement supprimer la question.Réponses:
Utiliser au
addHeader
lieu d'utiliser lasetHeader
méthode,*
dans la ligne ci-dessus permettraaccess to all domains
.Pour permettre
access to specific domain only
:Vérifiez ceci
blog post
.la source
Pourquoi l'erreur est générée:
Le code JavaScript est limité par la politique de même origine , ce qui signifie qu'à partir d'une page à l'adresse
www.example.com
, vous ne pouvez faire des requêtes (AJAX) qu'aux services situés à exactement dans le même domaine, dans ce cas, exactementwww.example.com
( pasexample.com
- sans lewww
- ouwhatever.example.com
).Dans votre cas, votre code Ajax tente d'accéder à un service à
http://wordicious.com
partir d'une page située surhttp://www.wordicious.com
.Bien que très similaires, ils ne sont pas du même domaine. Et lorsqu'ils ne sont pas sur le même domaine, la requête ne réussira que si la réponse de la cible contient un en-
Access-Control-Allow-Origin
tête.Comme votre page / service à
http://wordicious.com
n'a jamais été configuré pour présenter un tel en-tête, ce message d'erreur est affiché.Solution:
Comme dit, les domaines d'origine (où se trouve la page avec JavaScript) et cible (où le JavaScript tente d'atteindre) doivent être les exactement les mêmes.
Votre cas ressemble à une faute de frappe. Ressemble
http://wordicious.com
ethttp://www.wordicious.com
est en fait le même serveur / domaine. Donc, pour corriger, tapez la cible et l'origine de la même manière: faites-vous des pages / services de demande de code Ajax pourhttp://www.wordicious.com
ne pas le fairehttp://wordicious.com
. (Peut-être placer l'URL cible de manière relative, comme'/login.php'
, sans le domaine).Sur une note plus générale:
Si le problème n'est pas une faute de frappe comme celle de cette question semble être, la solution serait d' ajouter le
Access-Control-Allow-Origin
au domaine cible . L'ajouter dépend, bien entendu, du serveur / de la langue derrière cette adresse. Parfois, une variable de configuration dans l'outil fera l'affaire. D'autres fois, vous devrez ajouter vous-même les en-têtes via le code.la source
Pour .NET, le serveur peut le configurer dans web.config comme indiqué ci-dessous
Par exemple, si le domaine du serveur est http://live.makemypublication.com et que le client est http://www.makemypublication.com, configurez-le dans le web.config du serveur comme ci-dessous
la source
Si vous recevez ce message d'erreur du navigateur:
lorsque vous essayez de faire une requête Ajax POST / GET à un serveur distant qui est hors de votre contrôle, veuillez oublier cette solution simple:
Ce que vous devez vraiment faire, surtout si vous n'utilisez que JavaScript pour faire la requête Ajax, c'est un proxy interne qui prend votre requête et l'envoie au serveur distant.
Tout d'abord dans votre JavaScript, faites un appel Ajax à votre propre serveur, quelque chose comme:
Ensuite, créez un simple fichier PHP appelé proxy.php pour envelopper vos données POST et les ajouter au serveur URL distant en tant que paramètres. Je vous donne un exemple de la façon dont je contourne ce problème avec l'API de recherche d'hôtels Expedia:
En faisant:
Vous faites simplement la même requête mais du côté serveur et après cela, cela devrait fonctionner correctement.
la source
Vous devez l'ajouter au début de votre page php "login.php"
la source
vous devez mettre les clés / valeurs des en-têtes dans la réponse de la méthode d'options. par exemple, si vous avez une ressource sur http://mondomaine.com/myresource , dans votre code serveur, vous écrivez
la source
Modifiez la réponse de l'en-tête de l'API en ajoutant les paramètres supplémentaires suivants.
Access-Control-Allow-Credentials: true
Contrôle d'accès-Autoriser-Origine: *
Mais ce n'est pas une bonne solution en matière de sécurité
la source
La solution de contournement consiste à utiliser un proxy inverse s'exécutant sur votre hôte `` source '' et le transmettant à votre serveur cible, tel que Fiddler:
Lien ici: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy
Ou un proxy Apache Reverse ...
la source
Ajoutez ceci à votre fichier PHP ou à votre contrôleur principal
la source
header("Access-Control-Allow-Credentials: true");
Résolu avec l'entrée ci-dessous dans httpd.conf
la source
Veuillez trouver la fonction utilisée dans XMLHTTPREQUEST en Javascript pour configurer les en-têtes de requête.
Référence: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader
la source