Curious TechieDev Toolbox
Tous les Guides/Standards Web9 min read

Qu’est-ce que le CORS et la Politique de Même Origine (SOP) ?

Découvrez le partage de ressources cross-origin : requêtes preflight OPTIONS, headers d’autorisation et sécurisation d’API.

Points Clés
  • La Same-Origin Policy (SOP) empêche la lecture de réponses issues d’un domaine, port ou schéma différent.
  • Le CORS permet aux serveurs d’assouplir cette règle en déclarant explicitement les origines autorisées.
  • Une requête prévol OPTIONS vérifie la légitimité des méthodes et des en-têtes personnalisés.
  • L’étoile Access-Control-Allow-Origin: * est interdite dès que des cookies ou tokens d’authentification sont transmis.
  • Le contrôle CORS est exécuté exclusivement par le navigateur web client.

1. Qu’est-ce que la Same-Origin Policy (SOP) ?

La Same-Origin Policy (SOP) est la frontière de sécurité fondamentale des navigateurs qui isole les contextes d’exécution. Elle interdit au JavaScript de https://banque.com d’accéder aux cookies ou réponses Fetch de https://malveillant.com.

Deux adresses ont la même origine si et seulement si leur Protocole, leur Hôte et leur Port sont strictement identiques :

https://api.example.com:443 vs https://example.com:443ORIGINES DIFFÉRENTES (Sous-domaine distinct)
http://example.com:80 vs https://example.com:443ORIGINES DIFFÉRENTES (Protocole distinct : HTTP vs HTTPS)
https://example.com/app vs https://example.com/apiMÊME ORIGINE (Chemins d’accès distincts autorisés)

2. Comment le CORS Autorise l’Accès Cross-Origin Sécurisé

Le protocole CORS (Cross-Origin Resource Sharing) permet aux serveurs de stipuler explicitement quelles origines tierces peuvent lire leurs données grâce aux en-têtes de réponse HTTP :

  • Access-Control-Allow-Origin : Indique les origines autorisées (ex. : https://app.curious-techie.com).
  • Access-Control-Allow-Methods : Méthodes HTTP permises (ex. : GET, POST, PUT, DELETE).
  • Access-Control-Allow-Headers : En-têtes autorisés (ex. : Content-Type, Authorization).
  • Access-Control-Max-Age : Durée de mise en cache du preflight OPTIONS en secondes.

3. Requêtes Préliminaires OPTIONS (Preflight) & Cache

Pour les requêtes complexes (envoi de JSON avec Content-Type: application/json ou en-têtes d’authentification), le navigateur émet automatiquement une requête préalable HTTP OPTIONS (preflight) avant de transmettre le corps.

4. Le Piège des Identifiants et Caractères Génériques (*)

Un piège de sécurité récurrent lors du partage de sessions authentifiées entre origines :

Combinaison Invalide selon la Norme : Access-Control-Allow-Origin: * + Access-Control-Allow-Credentials: true

Les navigateurs refusent catégoriquement d’exposer la réponse si le joker * est combiné à des identifiants. Le serveur doit retourner l’origine exacte validée.