Preflight CORS
Requête OPTIONS supplémentaire que le navigateur envoie avant un appel cross-origin « non simple », pour demander au serveur si l'opération est permise. Déclencheurs : en-têtes personnalisés, méthodes autres que GET/POST/HEAD, Content-Type autre que celui des formulaires.
Déroulé : 1) le navigateur envoie un OPTIONS avec Access-Control-Request-Method et -Headers, 2) le serveur répond avec Access-Control-Allow-Origin, Allow-Methods et Allow-Headers (plus Max-Age pour la mise en cache), 3) la vraie requête part. Coût : le preflight ajoute un aller-retour. Parade : mettre en cache via Access-Control-Max-Age (5 s par défaut dans Chrome, 24 h dans Firefox).
Piège classique : le serveur n'a pas de gestionnaire OPTIONS → le preflight échoue → erreur CORS sans indication claire du pourquoi. Les messages d'erreur de fetch sont vagues ; c'est l'onglet Réseau des DevTools qui montre l'échec de l'OPTIONS.