edit 2018-09-13 : ajout de quelques précisions sur cette demande de pré-vol et comment l'éviter à la fin de cette réponse.
OPTIONS
les demandes sont ce que nous appelons des pre-flight
demandes Cross-origin resource sharing (CORS)
.
Ils sont nécessaires lorsque vous effectuez des demandes d'origines différentes dans des situations spécifiques.
Cette demande de pré-vol est effectuée par certains navigateurs par mesure de sécurité pour garantir que la demande en cours est approuvée par le serveur. Cela signifie que le serveur comprend que la méthode, l'origine et les en-têtes envoyés sur la demande sont sûrs d'agir.
Votre serveur ne doit pas ignorer mais gérer ces demandes chaque fois que vous essayez de faire des demandes d'origine croisée.
Une bonne ressource peut être trouvée ici http://enable-cors.org/
Un moyen de les gérer pour être à l'aise est de s'assurer que pour tout chemin avec OPTIONS
méthode, le serveur envoie une réponse avec cet en-tête
Access-Control-Allow-Origin: *
Cela indiquera au navigateur que le serveur est prêt à répondre aux demandes de toute origine.
Pour plus d'informations sur la façon d'ajouter la prise en charge CORS à votre serveur, voir l'organigramme suivant
http://www.html5rocks.com/static/images/cors_server_flowchart.png
modifier 2018-09-13
La OPTIONS
demande CORS n'est déclenchée que dans certains cas, comme expliqué dans les documents MDN :
Certaines demandes ne déclenchent pas de contrôle en amont CORS. Celles-ci sont appelées «demandes simples» dans cet article, bien que la spécification Fetch (qui définit CORS) n'utilise pas ce terme. Une demande qui ne déclenche pas un contrôle en amont CORS - une soi-disant «demande simple» - est celle qui remplit toutes les conditions suivantes:
Les seules méthodes autorisées sont:
Hormis les en-têtes définis automatiquement par l'agent utilisateur (par exemple, Connection, User-Agent ou tout autre en-tête dont le nom est défini dans la spécification Fetch comme «nom d'en-tête interdit»), les seuls en-têtes autorisés à être définies manuellement sont celles que la spécification Fetch définit comme étant un «en-tête de demande sécurisé CORS», qui sont:
- J'accepte
- Accept-Language
- Langue du contenu
- Type de contenu (mais notez les exigences supplémentaires ci-dessous)
- DPR
- Liaison descendante
- Enregistrer des données
- Largeur de la fenêtre
- Largeur
Les seules valeurs autorisées pour l'en-tête Content-Type sont:
- application / x-www-form-urlencoded
- multipart / form-data
- texte simple
Aucun écouteur d'événement n'est enregistré sur aucun objet XMLHttpRequestUpload utilisé dans la demande; ceux-ci sont accessibles à l'aide de la propriété XMLHttpRequest.upload.
Aucun objet ReadableStream n'est utilisé dans la demande.