Pourquoi les navigateurs envoient-ils des requêtes prévol OPTIONS en CORS ?
Les navigateurs envoient une requête préalable OPTIONS pour les requêtes non simples (contenant Authorization ou Content-Type: application/json) afin de vérifier que le serveur autorise explicitement ces paramètres avant d’exécuter l’action.
Detailed Technical Explanation
Ce mécanisme prévient l’exécution involontaire d’opérations avec modification d’état sur des serveurs non préparés au cross-origin. Si la requête dépasse les critères stricts des "Simple Requests", le navigateur expédie d’abord une sonde OPTIONS.
Technical Example & Code
Le navigateur interroge le serveur sur ses règles de partage avant l’envoi des données réelles.
// 1. Browser sends Preflight Request:
OPTIONS /api/orders HTTP/1.1
Host: api.example.com
Origin: https://app.curious-techie.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type, authorization
// 2. Server approves the interaction:
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://app.curious-techie.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400
// 3. Browser now automatically sends the actual POST request!Why This Is the Case (Underlying Architectural Rationale)
"Protéger l’intégrité des serveurs web historiques en exigeant une autorisation explicite avant toute requête cross-origin complexe."
Common Misconception vs Reality
"CORS protège les API contre les attaques de pirates utilisant cURL ou des scripts."
CORS est une mesure de protection appliquée par le navigateur; un attaquant utilisant un script serveur ou cURL ignore entièrement ces vérifications.
Related Curious-Techie Resources
How to Fix CORS Preflight Errors: Step-by-Step Guide →
Diagnose and resolve preflight 403 Forbidden errors, missing headers, and proxy redirection bugs.
Interactive ToolCORS Checker & Header Generator →
Test preflight OPTIONS handling and generate production-ready Express and Nginx CORS rules.
Developer ReferenceCORS Headers Reference & Specifications →
Related Questions in the Q&A Knowledge Base
CORS allows standard GET requests without a preflight check for backward compatibility with the legacy web. Because HTML tags like `<form>`, `<img>`, and `<script>` have always been able to issue cross-origin GET requests without pre-approval, requiring preflights for all GETs would have broken decades of existing web architecture.
HTTP 401 Unauthorized means the user is not authenticated (identity unknown; credentials missing or invalid), whereas HTTP 403 Forbidden means the user is authenticated (identity known), but lacks the necessary permissions to access the requested resource.
Using 'unsafe-inline' in a Content Security Policy defeats XSS protection because it instructs the browser to execute any inline script found in the HTML. Since Cross-Site Scripting works by injecting malicious inline script tags or event handlers, 'unsafe-inline' allows the attacker's payload to run freely.
Écosystème Technique Associé et Prochaines Étapes
Articles Techniques Associés
What Is CORS (Cross-Origin Resource Sharing)?
The standard protocol enabling controlled cross-origin data access in modern browsers.
CSP vs CORS: Differences in Browser Defense Mechanisms
Distinguishing outbound resource loading restrictions from inbound server access control.
Troubleshooting: No Access-Control-Allow-Origin Header Present
Diagnose and fix the most common browser cross-origin blocking error with production configs.
Laboratoires Pratiques de Diagnostic
Spécifications et Références Développeur
Poursuivre l’Apprentissage
CORS Policy & Preflight Handshake Lab
Simulate preflight OPTIONS probes and adjust Access-Control-Allow-* headers inside the browser sandbox.