web-dev-qa-db-fra.com

L'obtention de la demande ne réussit pas le contrôle de contrôle d'accès: aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée

J'essaie d'envoyer une demande Ajax à un serveur Tomcat à partir de mon application, mais j'obtiens cette erreur (mon application Web s'exécute sur Chrome):

La réponse à la demande de contrôle en amont ne réussit pas la vérification du contrôle d'accès: aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin 'null' n'est donc pas autorisé à accéder. La réponse avait le code d'état HTTP 403.

J'ai essayé d'utiliser

'Access-Control-Allow-Origin' : 'http://localhost:8080/app',

mais ça n'a pas marché.

Mon code Ajax:

 var arr = [1];
   $.ajax({ 
   url: 'http://localhost:8080/app',
   type: 'POST',
   contentType:'application/json',
   headers: {
   'Access-Control-Allow-Origin' : 'http://localhost:8080',
   },
       data: JSON.stringify(arr[0]),
       success: function(data){
        //On ajax success do this
             alert(data);
          }
     });
57
Labeo

Fondamentalement, pour faire une requête interdomaine AJAX, le serveur demandé doit permettre le partage de ressources entre origines (CORS). Vous pouvez en savoir plus à ce sujet à partir d’ici: http://www.html5rocks.com/en/tutorials/cors/

Dans votre scénario, vous définissez les en-têtes du client qui doivent en fait être définis dans http: // localhost: 8080/app code côté serveur.

Si vous utilisez le serveur Apache PHP, vous devrez ajouter ce qui suit dans votre fichier .htaccess:

Header set Access-Control-Allow-Origin "*"
33
Chandan

En cas de demande à un service REST:

Vous devez autoriser le CORS (partage d'origine croisé de ressources) sur le noeud final de votre annotation REST Service with Spring:

@CrossOrigin(origins = "http://localhost:8080")

Très bon tutoriel: https://spring.io/guides/gs/rest-service-cors/

10
L01c