2015-09-07 4 views
0

ok si jolie bizarre que j'ai le fichier server.js suivant avec le code suivant:nœud ne peut pas lire c'est en-tête Access-contrôle permet origine

app.all('/*', function (req, res, next) { 
    // CORS headers 
    res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    // Set custom headers for CORS 
    res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key'); 
    if (res.method === 'OPTIONS') { 
     res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain 
     res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
     // Set custom headers for CORS 
     res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key'); 
    } 
    next(); 
}); 

Maintenant, le domaine qui appelle mon système est api.example.com

Je l'appelle d'un autre site appelé angular.example.com

Quand je fais ce que je reçois le message d'erreur suivant dans la console:

XMLHttpRequest cannot load http://api.example.com/api/componentsByModule/125 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://angular.example.com' is therefore not allowed access. The response had HTTP status code 503. 

Mais comme vous pouvez le voir dans mon code ci-dessus, il doit définir les en-têtes sur toutes les demandes

Donc ma question est ce que je fais mal?

+0

Les deux sites que vous utilisez sont-ils vos propres sites? Le paramètre Access-Allow-Control-Origin est géré par le propriétaire du site sur son serveur. Je n'ai pas encore trouvé le moyen de l'autoriser à partir de mon application depuis mon domaine à accéder au domaine d'un autre utilisateur. Fait intéressant, les appels cURL fonctionnent bien, et HURL.it est idéal pour passer en revue les en-têtes de réponse d'un appel à une URL donnée. Mais, si vous ne possédez pas ce domaine, vous tentez d'accéder ou de contrôler les fichiers de configuration du serveur, vous ne pouvez pas injecter l'accès aux scripts inter-sites (XSS/CORS) ici: (https: // www .hurl.it /) –

+0

@MikeHorstmann mes deux sites sont gérés par moi mais j'ai sous-domaines serveral qui pointe vers la même adresse IP –

+0

'app.use' est la façon la plus idiomatique d'ajouter middleware dans express au lieu de plus verbeux' app.all ('/ *' '. –

Répondre

1

L'ordre d'ajout de middleware dans Express est critique. Vous devez vous assurer que votre extrait ci-dessus se passe AVANT tout le reste de vos routes d'application. Cela devrait se faire très rapidement après la création initiale de l'instance app.

+0

C'est la première chose après avoir instancié mon ap –