Sobes.tech
Middle

Pourquoi la méthode OPTIONS est-elle envoyée dans une requête HTTP avant d'effectuer des requêtes GET/POST?

sobes.tech IA

Réponse de l'IA

La méthode OPTIONS est utilisée pour déterminer les méthodes disponibles et d’autres options paramétrées pour une ressource web ou un serveur, sans nécessiter d’action particulière ou d’accès à la ressource elle-même par la requête. C’est une partie du mécanisme CORS (Cross-Origin Resource Sharing).

Lorsqu’une page web tente de faire une requête à une ressource sur un autre domaine (requête cross-origin), le navigateur peut envoyer une requête préliminaire (preflight) avec la méthode OPTIONS. Cette requête contient des en-têtes tels que Access-Control-Request-Method et Access-Control-Request-Headers, qui indiquent la méthode HTTP et les en-têtes qui seront utilisés dans la requête réelle.

Le serveur recevant la requête OPTIONS peut répondre avec des en-têtes comme Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers et Access-Control-Max-Age, pour informer le navigateur si la requête réelle est autorisée et quels méthodes/en-têtes sont acceptés.

Si le serveur autorise la requête, le navigateur procède à l’envoi de la requête réelle (GET, POST, etc.). Sinon, la requête est bloquée par le navigateur, empêchant ainsi l’envoi de la requête réelle, protégeant le serveur contre les requêtes cross-origin non autorisées.

La requête OPTIONS n’est pas envoyée avant chaque requête GET/POST, mais seulement avant certains types de requêtes cross-origin considérées comme "non simples" (non-simple). Les requêtes simples (par exemple, GET ou POST avec certains types de contenu et sans en-têtes personnalisés) sont envoyées sans requête OPTIONS préliminaire.

# Exemple d’en-têtes de requête OPTIONS
# Access-Control-Request-Method: POST
# Access-Control-Request-Headers: Content-Type, Authorization
# Origin: http://client-domain.com

# Exemple d’en-têtes de réponse du serveur à OPTIONS
# Access-Control-Allow-Origin: http://client-domain.com
# Access-Control-Allow-Methods: POST, GET, OPTIONS
# Access-Control-Allow-Headers: Content-Type, Authorization
# Access-Control-Max-Age: 86400 # Met en cache le résultat preflight pendant 24 heures

En général, il s’agit d’un mécanisme de sécurité pour contrôler l’accès aux ressources lors de requêtes cross-origin, permettant au serveur de déterminer avant d’envoyer la requête principale si le navigateur effectuera des actions autorisées.