1000 Outils

Testeur CORS

Configurez vos en-têtes CORS (Cross-Origin Resource Sharing) visuellement et générez la configuration pour votre framework : Express.js, Fastify, Django, Flask, Spring Boot, Nginx ou Apache. Sélectionnez les origines autorisées, les méthodes HTTP, les en-têtes, activez les credentials et le preflight. Obtenez les en-têtes HTTP bruts et le code de configuration prêt à copier.

En-têtes HTTP CORS

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400

Configuration Express.js (Node)

const cors = require('cors');

app.use(cors({
  origin: "https://example.com",
  methods: ['GET', 'POST', 'PUT', 'DELETE'],
  allowedHeaders: ['Content-Type', 'Authorization'],
  credentials: false,
  maxAge: 86400
}));

Qu'est-ce que CORS et pourquoi est-ce nécessaire ?

CORS (Cross-Origin Resource Sharing) est un mécanisme de sécurité des navigateurs qui bloque par défaut les requêtes HTTP entre domaines différents. Si votre frontend sur app.example.com appelle une API sur api.example.com, le navigateur bloque la requête sauf si le serveur API envoie les bons en-têtes CORS. C'est une protection contre les attaques CSRF, mais elle cause souvent des erreurs frustrantes en développement ("has been blocked by CORS policy").

Comment fonctionnent les requêtes preflight ?

Pour les requêtes "complexes" (PUT, DELETE, ou avec des en-têtes personnalisés), le navigateur envoie d'abord une requête OPTIONS (preflight) pour demander au serveur s'il autorise la requête réelle. Le serveur doit répondre avec les en-têtes Access-Control-Allow-Origin, Access-Control-Allow-Methods et Access-Control-Allow-Headers. Le header Access-Control-Max-Age indique combien de temps le navigateur peut mettre en cache la réponse preflight pour éviter de la répéter à chaque requête.

Erreurs CORS courantes et solutions

L'erreur la plus fréquente est l'absence de l'en-tête Access-Control-Allow-Origin dans la réponse du serveur. Autres pièges courants : utiliser Access-Control-Allow-Origin: * avec Access-Control-Allow-Credentials: true (interdit par les navigateurs), oublier de gérer la méthode OPTIONS pour les preflight, ne pas inclure les en-têtes personnalisés dans Access-Control-Allow-Headers, et configurer CORS côté frontend au lieu du backend (c'est le serveur qui doit envoyer les en-têtes, pas le client).

Questions fréquentes

Outils similaires