Je construis une application, utilisez vue et codeigniter, mais j'ai un problème lorsque j'essaye d'obtenir une API, j'ai cette erreur sur la console
Access to XMLHttpRequest at 'http://localhost:8888/project/login'
from Origin 'http://localhost:8080' has been blocked by CORS policy:
Request header field access-control-allow-Origin is not allowed
by Access-Control-Allow-Headers in preflight response.
J'ai essayé comme ça sur le front-end (main.js)
axios.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
et cela sur le backend (contrôleur)
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
et vue méthode de connexion
this.axios.post('http://localhost:8888/project/login', this.data, {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PATCH, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token"
}
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err.response);
});
J'ai cherché et essayé dans stackoverflow mais ne fonctionne pas, comment puis-je le résoudre? je vous remercie beaucoup pour votre aide
dans mon cas, curl && postman fonctionne mais pas vue axios.post
L'accès à XMLHttpRequest à ' http: // %%%%: 9200/lead/_search ' à partir de l'origine ' http: //%%%%.local ' a été bloqué par la stratégie CORS: le champ d'en-tête de demande access-control-allow-Origin n'est pas autorisé par Access-Control-Allow-Headers dans la réponse de contrôle en amont.
Donc, le problème est du côté vue pas du serveur!
La réponse du serveur contient l'en-tête "access-control-allow-Origin: *"
Cela peut se produire si vous essayez d'appeler un autre hôte pour ex- Vous Vue L'application s'exécute sur localhost: 8080 mais votre API de backend s'exécute sur http: // localhost: 8888 Dans cette situation, axios demande la recherche de cet hôte local: 8080/project/login au lieu de cela http: // localhost: 8888/project/login
Pour résoudre ce problème, vous devez créer un proxy dans votre application vue
Suivez ces instructions Créez le fichier js vue.config.js ou webpack.config.js si vous ne l'avez pas encore dans le dossier racine
puis inclure ci-dessous
module.exports = {
devServer: {
proxy: 'https://localhost:8888'
} }
Si vous avez besoin de plusieurs backends, utilisez ci-dessous
module.exports = {
devServer: {
proxy: {
'/V1': {
target: 'http://localhost:8888',
changeOrigin: true,
pathRewrite: {
'^/V1': ''
}
},
'/V2': {
target: 'https://loclhost:4437',
changeOrigin: true,
pathRewrite: {
'^/V2': ''
}
},
}
}
Si vous sélectionnez le second devant le point final, utilisez l'ex V1 ou V2 - votre point final est/project/login avant d'utiliser V1/project/login ou V2/project/login selon l'hôte