Partie 5
Le CORS
Le CORS (Cross-Origin Resource Sharing) est un mécanisme des navigateurs pour autoriser ou restreindre les requêtes HTTP venant d'un autre domaine. Il s'appuie sur la Same-Origin Policy (SOP) : par défaut, un script d'une origine ne peut pas interagir librement avec les ressources d'une autre.
Une origine = schéma (http, https…) + nom de domaine + port. Deux ressources ont la même origine si ces trois composants sont identiques.
Exemple du cours : une page chargée depuis https://www.example.com ne peut pas faire de requête AJAX vers https://api.anotherdomain.com sans autorisation explicite. Besoin typique : une SPA sur https://frontend.com qui parle à une API sur https://api.backend.com.
Vérifie que tu as compris
Requête simple et requête prévol
Requête simple : GET ou POST sans en-tête particulier. Le serveur répond avec Access-Control-Allow-Origin ; absent ou différent de l'origine de la requête, le navigateur bloque la réponse.
Requête prévol (preflight) : pour les requêtes plus complexes (méthodes autres que GET/POST, en-têtes personnalisés), le navigateur envoie d'abord une requête OPTIONS.
OPTIONS /data HTTP/1.1 Origin: https://frontend.com Access-Control-Request-Method: PUT HTTP/1.1 200 OK Access-Control-Allow-Origin: https://frontend.com Access-Control-Allow-Methods: GET, POST, PUT, DELETE Access-Control-Allow-Headers: Content-Type Access-Control-Max-Age: 86400
Si la réponse est favorable, la requête réelle est envoyée. Max-Age: 86400 met la réponse prévol en cache 1 jour (86 400 secondes).
Les en-têtes
| En-tête | Rôle |
|---|---|
| Access-Control-Allow-Origin | origines autorisées (domaine précis ou joker *) |
| Access-Control-Allow-Methods | méthodes HTTP autorisées |
| Access-Control-Allow-Headers | en-têtes utilisables (Authorization, Content-Type) |
| Access-Control-Allow-Credentials | autorise cookies ou infos d'authentification (true) |
| Access-Control-Max-Age | durée de cache du prévol, en secondes |
Vérifie que tu as compris
CORS et sécurité
Access-Control-Allow-Origin: *: toutes les origines peuvent accéder aux ressources, dangereux sans précaution.Allow-Credentials: trueavecAllow-Origin: *: faille potentielle (cookies ou tokens envoyés à des origines non autorisées). Ne jamais combiner.- Restreindre précisément les origines ; tester avec curl, Postman ou la console du navigateur.
Le CORS est une protection appliquée par le navigateur ; elle ne remplace ni l'authentification ni l'autorisation (hors cours, mais déduit du principe : curl ne l'applique pas).
Vérifie que tu as compris