editar 2018-09-13 : se agregaron algunas precisiones sobre esta solicitud previa al vuelo y cómo evitarla al final de esta respuesta.
OPTIONS
las solicitudes son lo que llamamos pre-flight
solicitudes en Cross-origin resource sharing (CORS)
.
Son necesarios cuando realiza solicitudes a través de diferentes orígenes en situaciones específicas.
Algunos navegadores realizan esta solicitud previa al vuelo como medida de seguridad para garantizar que el servidor confíe en la solicitud que se realiza. Lo que significa que el servidor entiende que el método, el origen y los encabezados que se envían en la solicitud son seguros para actuar.
Su servidor no debe ignorar sino manejar estas solicitudes siempre que intente hacer solicitudes de origen cruzado.
Un buen recurso se puede encontrar aquí http://enable-cors.org/
Una forma de manejarlos para sentirse cómodo es asegurarse de que, para cualquier ruta con OPTIONS
método, el servidor envíe una respuesta con este encabezado
Access-Control-Allow-Origin: *
Esto le dirá al navegador que el servidor está dispuesto a responder solicitudes de cualquier origen.
Para obtener más información sobre cómo agregar soporte CORS a su servidor, consulte el siguiente diagrama de flujo
http://www.html5rocks.com/static/images/cors_server_flowchart.png
editar 2018-09-13
La OPTIONS
solicitud CORS se activa solo en algunos casos, como se explica en los documentos de MDN :
Algunas solicitudes no activan una verificación previa CORS. Esas se llaman "solicitudes simples" en este artículo, aunque la especificación Fetch (que define CORS) no usa ese término. Una solicitud que no desencadena una verificación previa de CORS, una llamada "solicitud simple", es una que cumple con las siguientes condiciones:
Los únicos métodos permitidos son:
Además de los encabezados configurados automáticamente por el agente de usuario (por ejemplo, Connection, User-Agent o cualquiera de los otros encabezados con nombres definidos en la especificación Fetch como "nombre de encabezado prohibido"), los únicos encabezados que pueden configurados manualmente son aquellos que la especificación Fetch define como un "encabezado de solicitud protegido por CORS", que son:
- Aceptar
- Aceptar lenguaje
- Lenguaje de contenido
- Tipo de contenido (pero tenga en cuenta los requisitos adicionales a continuación)
- DPR
- Enlace descendente
- Guardar datos
- Ancho de ventana
- Anchura
Los únicos valores permitidos para el encabezado Content-Type son:
- application / x-www-form-urlencoded
- multipart / form-data
- Texto sin formato
Ningún detector de eventos está registrado en ningún objeto XMLHttpRequestUpload utilizado en la solicitud; se accede a ellos utilizando la propiedad XMLHttpRequest.upload.
No se utiliza ningún objeto ReadableStream en la solicitud.