Lorsque j'essaie de faire des appels d'API depuis mon Angular 2 App vers mon API, j'obtiens l'erreur suivante:
XMLHttpRequest cannot load http://localhost/myAPI/public/api/v1/auth/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 422.
J'ai vérifié toutes les questions sur le Web et tout ce qui concerne CORS, rien n'a résolu mon problème!
Mon API Laravel fonctionnant sur le port 80. (localhost)
Mon application angulaire 2 fonctionnant sur le port 3000. (localhost: 3000)
Alors, qu'est-ce qui ne va pas? Pourquoi mon Angular 2 app ne peut pas obtenir des enregistrements de mon API?
D'accord. semblent devoir configurer Apache pour cela.
j'utilise xampp webserver, et j'ai dû modifier mon httpd.conf comme expliqué ici pour résoudre ce problème.
Ajout de cette ligne:
Header set Access-Control-Allow-Origin "http://localhost:3000"
résolu mon problème.
Le redémarrage d'Apache est nécessaire.
Ouvrez chrome inspectez l'outil, passez à l'onglet Network
et inspectez la requête Angular2 envoyée.
Dans Headers
-> Response Headers
, vérifiez s'il y a Access-Control-Allow-Origin:*
(Je parie que non)
Si vous créez une API, la solution la plus simple consiste à ajouter
if (Request::is("api/*")) {
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, If-Modified-Since, Cache-Control, Pragma");
}
au début de routes.php
, l'utilisation d'un middleware serait une meilleure approche, mais assurez-vous qu'il fonctionne correctement et ajoutez le Access-Control-Allow-Origin
à l'en-tête de réponse.
//Add this middleware in your express app
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.header('access-Control-Allow-Origin', '*');
next();
});
J'ai essayé d'activer les cors dans Laravel côté avec le middleware Cors
Avez-vous enregistré des itinéraires pour gérer les demandes OPTIONS
?
Si vous ajoutez simplement un middleware aux routes GET
et POST
existantes et que le navigateur fait une demande OPTIONS
, le middleware n'est jamais atteint.