Déploiement
Déploiement • Chapitre 13 : Maintenance et dépannage en production

Résolution des erreurs CORS

Le mécanisme CORS (Cross-Origin Resource Sharing) est la source N°1 de frustration des développeurs web. Comprenez pourquoi le serveur répond correctement mais le navigateur bloque la réponse et comment configurer les en-têtes Access-Control sans faille de sécurité.

🌐
Origine = Protocole + Hôte + Port

https://monsite.com et http://monsite.com sont deux origines différentes.

🛡️
Sécurité Navigateur

Le blocage est effectué par le navigateur du client, JAMAIS par le serveur lui-même.

✈️
Requête Preflight OPTIONS

Vérification préalable automatique envoyée avant tout POST, PUT ou requête avec headers custom.

⚠️
Incompatibilité Wildcard *

L'en-tête Access-Control-Allow-Origin: * est formellement interdit si credentials: true.

cors-response-headers.http
# 1. Requête Preflight OPTIONS envoyée automatiquement par le navigateur :
OPTIONS /api/v1/orders HTTP/1.1
Host: api.learnweb.com
Origin: https://learnweb.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization, Content-Type

# 2. Réponse OBLIGATOIRE du backend pour autoriser le passage (HTTP 204 ou 200) :
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://learnweb.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400

# 3. Test direct en ligne de commande pour simuler le navigateur :
$ curl -I -X OPTIONS https://api.learnweb.com/api/v1/orders   -H "Origin: https://learnweb.com"   -H "Access-Control-Request-Method: POST"
# ✅ Si les headers Access-Control-Allow-* apparaissent : le navigateur autorise l'accès !

Guide Approfondi & Architecture Système

1. La Grande Vérité sur CORS : Le Serveur Répond Toujours !

Pour dissiper le mystère une fois pour toutes :
Quand votre console affiche Cross-Origin Request Blocked, votre API a bel et bien reçu la requête et l'a exécutée ! Elle a même renvoyé les données. C'est le navigateur web de l'internaute qui jette la réponse à la poubelle avant que votre code JavaScript ne puisse la toucher, parce que les en-têtes de permission étaient absents.

2. Le Piège Mortel du Wildcard * avec Cookies

L'erreur la plus classique :
  • Vous voulez autoriser tout le monde, vous mettez Access-Control-Allow-Origin: *.
  • Mais votre application utilise des sessions ou des tokens dans des cookies (credentials: true).
  • Le standard W3C interdit catégoriquement cette combinaison ! Le navigateur bloquera la requête avec une erreur rouge. Vous devez impérativement renvoyer l'origine exacte du demandeur (https://learnweb.com).

Tableau Récapitulatif : Les 4 En-têtes CORS Indispensables

En-tête de RéponseValeur Recommandée en ProductionRôle Technique
Access-Control-Allow-Originhttps://learnweb.com (Origine explicite)Déclare quel domaine a le droit de lire les données
Access-Control-Allow-MethodsGET, POST, PUT, DELETE, OPTIONSListe des verbes HTTP autorisés pour cette route
Access-Control-Allow-HeadersContent-Type, AuthorizationAutorise l'envoi de headers personnalisés (notamment le Bearer JWT)
Access-Control-Allow-CredentialstrueAutorise le passage des cookies de session et informations d'identification
Access-Control-Max-Age86400 (24 heures)Met la réponse OPTIONS en cache pour éviter de renvoyer un preflight à chaque clic