Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Access Control Origin avec Angular


Sujet :

NodeJS

  1. #1
    Membre du Club
    Access Control Origin avec Angular
    Bonsoir,

    J'ai fais de nombreuses recherches et essais, mais mes requêtes du front (Angular) vers mon back (NodeJs) sont toujours bloqué par le CORS.

    Voici ce que j'ai avant chaque requête :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        res.header("Access-Control-Allow-Origin", "http://domaine.com/");
        res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH,OPTIONS");
        res.header("Access-Control-Allow-Headers", "X-Requested-With,content-type");


    Ce que j'ai essayé de mettre dans le .htaccess :
    Header set Access-Control-Allow-Origin "*"

    Ce que j'ai essayé de mettre dans le app.js :
    app.use(cors({origin: 'http://domaine.com/'}));

    J'ai essayé en mettant les 3 à la fois, chacun séparément, etc. J'ai l'impression que la ligne dans .htaccess et dans app.js ne sert à rien.
    Si je laisse les 3 lignes avant chacune de mes requêtes, j'obtiens cette erreur :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values 'http://domaine.com/, *', but only one is allowed.

    Nul part je n'ai mis une autorisation pour l'origine "*".

    Si j'enlève la première ligne "res.header("Access-Control-Allow-Origin", "http://domaine.com/");" j'obtiens cette erreur :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.


    Quelqu'un a une idée ?
    Est-ce que ça pourrait venir de mon serveur ?

    Merci

  2. #2
    Expert éminent sénior
    Nul part je n'ai mis une autorisation pour l'origine "*".
    Ben si via Apache et tu l'indiques ici :

    Ce que j'ai essayé de mettre dans le .htaccess :
    Header set Access-Control-Allow-Origin "*"
    Soit tu configures CORS sur ton application, soit tu le fais via ton serveur web mais si tu commences à diviser la responsabilité de cette tâche (configurer CORS) entre différents composants tu vas t'y perdre.

    Je te conseille de la faire sur ton application uniquement pour commencer. Donc oublie Apache pour ça.

    A noter que le wildcard * est interdit par certains navigateurs (Chrome par exemple).
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre du Club
    J'ai enlevé la ligne dans .htaccess et dans app.js

    Il me reste seulement ceci :


    Quand on regarde l'en-tête sur le navigateur (firefox), on voit ceci :



    J'ai contacté mon serveur, ils n'ont pas de configuration par défaut à ce niveau, et j'ai beau fouiller mon code, je ne trouve nul part la déclaration Origin : *

    Est-ce que ça pourrait venir d'un package ?

  4. #4
    Expert éminent sénior
    Oui, tu peux poster les propriétés dependencies et devDependencies de ton package.json ?

    Je pense notamment au package cors. As-tu un bout de code de ce style ?

    Code javascript :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const cors = require('cors');
    // ...
    app.use(cors());


    Il me semble que la config par défaut de ce module met le wildcard.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Membre du Club
    Oui bien sur, les voici :


  6. #6
    Expert éminent sénior
    A ta place je mettrais dans les logs (tu as une solution pour log tes requêtes ?) les headers http de chaque requête pour déterminer si c'est ton code ou le serveur de ton hébergeur qui ajoute le Access-Control-Allow-Origin avec le wildcard.

    Tu seras où chercher après ça.

    Comment ça marche pour ton hébergement ? Tu parlais de Apache mais ça ça n'a pas de rapport avec node. C'est pour ton front Angular ? C'est le backend qui pose ces headers. Tu devrais avoir dans ton code back une partie qui s'occupe de lancer un serveur. Après il y a peut être chez ton hébergeur un proxy entre ton front et ton backend. Et peut être que c'est lui qui pose ce header.

    Bref faudrait savoir comment ton architecture est foutue.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  7. #7
    Membre du Club
    J'ai fais des tests en local, je n'ai aucun wildcard qui apparaît dans le header des requêtes. Ça provient donc de mon serveur, pourtant je les ai contacté à ce sujet, ils m'ont dit que ça ne venait pas de chez eux.

    Je suis sur l'hébergeur O2Switch, et pour NodeJs, ils utilisent ceci : https://docs.cloudlinux.com/lve_mana...-js-selector-2

    Je n'ai pas parlé d'Apache en particulier mais du fichier .htaccess pcq c'est une des solutions que j'ai trouvé sur le net, notamment en ce qui concerne le routage.

  8. #8
    Expert éminent sénior

    Je n'ai pas parlé d'Apache en particulier mais du fichier .htaccess pcq c'est une des solutions que j'ai trouvé sur le net, notamment en ce qui concerne le routage.
    .htaccess est un fichier de configuration de Apache (le serveur web). Si tu n'as pas d'Apache installé ce fichier ne sert à rien.

    J'ai fais des tests en local, je n'ai aucun wildcard qui apparaît dans le header des requêtes. Ça provient donc de mon serveur
    Ton serveur node est-il exécuté de la même manière que tu sois en local ou sur leur serveur ?

    Je suis sur l'hébergeur O2Switch
    De mémoire j'ai déjà vu passer des messages ici à propos de cet hébergeur et il me semble bien qu'ils ne supportent pas node par défaut il faut bidouiller mais ça a peut être changé.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  9. #9
    Membre du Club
    J'ai fini par trouver. J'avais un fichier .htaccess dans un autre dossier, avec le wildcard...

    Du coup la connexion se fait bien, merci Marco46

###raw>template_hook.ano_emploi###