135 votes

Pas de "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine 'http://wordicious.com' est donc pas autorisé à accéder

Je suis en utilisant .htaccess pour réécrire des url et j'ai utilisé le code html de la base de balise afin de le faire fonctionner.

Maintenant, quand j'essaie de faire une requête ajax j'obtiens l'erreur suivante:

XMLHttpRequest ne peut pas charger http://www.wordicious.com/login.php. Pas de "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine 'http://wordicious.com' est donc pas autorisé à accéder.

J'ai cherché des solutions mais je n'ai pas trouvé.

Merci à l'avance.

170voto

user1153551 Points 3562

Utiliser addHeader au Lieu d'utiliser setHeader méthode,

response.addHeader("Access-Control-Allow-Origin", "*");

* au-dessus de la ligne permettra access to all domains.


Pour permettre à d' access to specific domain only:

response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");

Cochez cette blog post.

146voto

acdcjunior Points 19898

Pourquoi le message d'erreur est généré:

Le code JavaScript est limitée par la même la politique de l'origine, du sens, à partir d'une page à l' www.example.com, vous ne pouvez le faire (AJAX) les demandes de services situé à exactement le même domaine, dans ce cas, exactement www.example.com (pas example.com - sans l' www - ou whatever.example.com).

Dans votre cas, votre code Ajax est en train d'atteindre un service en http://wordicious.com à partir d'une page située à l'adresse http://www.wordicious.com.

Bien que très similaires, ils sont pas du même domaine. Et quand ils ne sont pas sur le même domaine, la demande ne sera réussi que si la cible respose contient un Access-Control-Allow-Origin - tête.

En tant que 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 l'a dit, l'origine (d'où le JavaScript est) et la cible (d'où le JavaScript est en essayant de l'atteindre), les domaines doivent être l' exact même.

Votre cas semble être une faute de frappe. Ressemble http://wordicious.com et http://www.wordicious.com sont en fait le même serveur/domaine. Donc, pour corriger, le type de la cible et de l'origine de manière égale: vous faire Ajax demande de code pages/services http://www.wordicious.com pas http://wordicious.com. (Peut-être la place de l'URL cible relativement, comme '/login.php', sans le de domaine).



Sur un plan plus général:

Si le problème n'est pas une faute de frappe comme celui de cette question semble être la solution serait d' ajouter l' Access-Control-Allow-Origin pour le domaine cible. Pour l'ajouter, dépend, bien sûr, de du serveur/langue derrière cette adresse. Parfois, une variable de configuration dans l'outil fera l'affaire. D'autres fois, vous aurez à ajouter les en-têtes à l'aide de code vous-même.

62voto

Naga Points 190

Pour .NET serveur pouvez configurer cela dans le web.config comme ci-dessous

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="your_clientside_websiteurl" />
     </customHeaders>
   </httpProtocol>
 <system.webServer>

Par exemple, disons que, si le serveur de domaine est http://live.makemypublication.com et le client est http://www.makemypublication.com puis configurer le serveur web.config comme ci-dessous

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="http://www.makemypublication.com" />
     </customHeaders>
  </httpProtocol>
 <system.webServer>

7voto

i-systech.com Points 51

vous devez mettre les en-têtes de clés/valeurs dans les options de la méthode de réponse. par exemple, si vous avez des ressources à http://mydomain.com/myresource puis, dans votre serveur de code que vous écrivez

//response handler
void handleRequest(Request request, Response response) {
    if(request.method == "OPTIONS") {
       response.setHeader("Access-Control-Allow-Origin","http://clientDomain.com")
       response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
       response.setHeader("Access-Control-Allow-Headers", "Content-Type");
    }



}

3voto

hzrari Points 322

La solution de contournement consiste à utiliser un reverse proxy en cours d'exécution sur votre "source" accueil et transfert vers votre serveur cible, tel que Fiddler:

http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy

Ou un Apache en Reverse proxy...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X