Je fais unPOSTà un service à l'aide de Postman Chrome Extension , et j'obtiens la réponse attendue.
Mais, quand je fais la même chosePOSTrequest en utilisant $http
, tout va au diable.
J'ai un :
Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers
Engaged-Auth-Token
étant un en-tête.
Je ne sais pas pourquoi avec Postman fonctionne et cela ne fonctionne pas avec Chrome ...
Des idées?
Le problème est dû à l'absence de Access-Control-Allow-Headers
dans l'en-tête de la demande. Pour résoudre ce problème, nous devons ajouter Access-Control-Allow-Headers: *
à l'en-tête de la demande.
Ajoutez un Access-Control-Allow-Headers
au http request header
. Vous pouvez le faire au niveau de l'application en utilisant $httpProvider
. Ajoutez la ligne ci-dessous dans la section de configuration de votre application pour ajouter cet en-tête.
var app = angular.module("app", [
"ngRoute",
"app.controllers",
"app.directives",
"app.filters"
]);
app.config([
"$routeProvider",
"$httpProvider",
function($routeProvider, $httpProvider){
$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
}
]);
Je crois que la configuration de Access-Control-Allow-Headers sur le $ httpProvider sur le CLIENT ne fonctionnera pas. Je pense que l'en-tête doit être configuré sur le serveur (en tant qu'en-tête de réponse). Dans une application nœud-express, par exemple, cela pourrait être fait avec un middleware (par exemple), en mettant comme ceci:
res.header('*')
ou (plus sélectivement) uniquement les en-têtes dont vous avez besoin:
res.header('Engaged-Auth-Token, Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
si utilisez voiles api sur le backend change cors.js et ajoutez votre jeton classé ici
module.exports.cors = {
allRoutes: true,
Origin: '*',
credentials: true,
methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
headers: 'Origin, X-Requested-With, Content-Type, Accept, Engaged-Auth-Token'
};