Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 20-10-2023 09:59:23
- techi
- Invité
Problème Node.js et CORS : dépannage du partage de ressources entre or
Je travaille sur un projet Node.js qui sert d'API backend et j'ai rencontré un problème CORS (Cross-Origin Resource Sharing). Mon API doit gérer les requêtes d'un domaine différent, mais je reçois des erreurs liées à CORS. Je recherche des conseils sur la façon de résoudre ce problème.
Voici une version simplifiée de mon code Node.js qui configure une API Express :
const app = express();
const port = 3000;
app.get('/data', (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
Lorsque j'essaie de faire une requête à cette API depuis un autre domaine, je reçois une erreur CORS dans le navigateur :
Veuillez fournir des exemples de code et des étapes pour configurer CORS dans mon application Node.js afin d'autoriser les requêtes provenant d'un domaine spécifique (par exemple,https://www.scaler.com/topics/nodejs/cors-in-node-js/).
Comment puis-je configurer des configurations CORS plus avancées, telles que l'autorisation de plusieurs origines ou la gestion de méthodes HTTP spécifiques ?
Existe-t-il des considérations de sécurité ou des bonnes pratiques dont je dois être conscient lors de la configuration de CORS dans mon application Node.js ?
Je recherche des conseils pratiques pour résoudre ce problème CORS et garantir que mon API peut accepter les demandes de différents domaines tout en maintenant la sécurité. Vos idées seraient très précieuses.
#2 26-10-2023 06:00:52
- Lina89
- Membre
- Inscription : 17-10-2023
- Messages : 1
Re : Problème Node.js et CORS : dépannage du partage de ressources entre or
Salut, je vois que tu galères avec le problème CORS. C'est assez courant quand on fait des requêtes entre différents domaines. Je vais essayer de t'aider avec quelques pistes.
La première chose à faire, c'est d'installer le module cors qui te permet de gérer facilement les headers CORS dans ton application Express. Tu peux le faire avec la commande :
npm install cors
Ensuite, tu peux utiliser le middleware cors pour activer les requêtes CORS pour toutes tes routes, ou seulement pour celles que tu veux. Par exemple, si tu veux autoriser les requêtes CORS pour la route /data, tu peux faire comme ça :
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;
app.get('/data', cors(), (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});
app.listen(port, () => {
console.log(Server is running on port ${port});
});
Si tu veux autoriser les requêtes CORS pour toutes tes routes, tu peux faire comme ça :
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(cors());
app.get('/data', (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});
app.listen(port, () => {
console.log(Server is running on port ${port});
});
Par défaut, le middleware cors va ajouter le header Access-Control-Allow-Origin: * à tes réponses, ce qui veut dire que tu acceptes les requêtes de n'importe quel domaine. Si tu veux restreindre les domaines autorisés, tu peux passer des options au middleware cors, comme ça :
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;
// Liste des domaines autorisés
const whitelist = ['http://example1.com', 'http://example2.com'];
// Options pour le middleware cors
const corsOptions = {
origin: function (origin, callback) {
// Si l'origine de la requête est dans la liste blanche, on appelle le callback avec true
if (whitelist.indexOf(origin) !== -1) {
callback(null, true);
} else {
// Sinon, on appelle le callback avec une erreur
callback(new Error('Not allowed by CORS'));
}
}
};
// On utilise le middleware cors avec les options pour la route /data
app.get('/data', cors(corsOptions), (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});
app.listen(port, () => {
console.log(Server is running on port ${port});
});
Tu peux aussi configurer d'autres options pour le middleware cors, comme les méthodes HTTP autorisées, les headers autorisés, etc. Tu peux trouver plus de détails sur la documentation du module corshttps://www.npmjs.com/package/cors.
Pour les requêtes complexes qui nécessitent une requête préliminaire OPTIONS, tu dois ajouter un handler pour cette méthode sur la route que tu veux supporter. Par exemple, si tu veux accepter les requêtes DELETE sur la route /data, tu peux faire comme ça :
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;
// On active le middleware cors pour la requête OPTIONS sur la route /data
app.options('/data', cors());
// On active le middleware cors pour la requête DELETE sur la route /data
app.delete('/data', cors(), (req, res) => {
// Ici tu fais ce que tu veux pour supprimer les données
res.json({ message: 'Data deleted.' });
});
app.listen(port, () => {
console.log(Server is running on port ${port});
});
En ce qui concerne la sécurité et les bonnes pratiques, il faut être prudent avec les headers CORS et ne pas autoriser n'importe quel domaine ou n'importe quelle méthode. Il faut aussi vérifier l'authentification et l'autorisation des requêtes avant de renvoyer des données sensibles. Tu peux trouver plus d'informations sur les risques et les précautions liés à CORS sur ce site [CORS security].
J'espère que ça t'aide un peu à résoudre ton problème CORS. N'hésite pas à me dire si ça marche ou si tu as d'autres questions. Bon courage !
Hors ligne







