modifica 13/09/2018 : aggiunte alcune precisazioni su questa richiesta pre-volo e su come evitarlo alla fine di questa risposta.
OPTIONS
le richieste sono ciò in cui chiamiamo pre-flight
richieste Cross-origin resource sharing (CORS)
.
Sono necessari quando si effettuano richieste tra origini diverse in situazioni specifiche.
Questa richiesta pre-volo viene fatta da alcuni browser come misura di sicurezza per garantire che la richiesta in corso sia considerata attendibile dal server. Ciò significa che il server comprende che il metodo, l'origine e le intestazioni inviati sulla richiesta sono sicuri su cui agire.
Il tuo server non dovrebbe ignorare ma gestire queste richieste ogni volta che stai tentando di fare richieste incrociate.
Una buona risorsa può essere trovata qui http://enable-cors.org/
Un modo per gestirli per sentirsi a proprio agio è assicurarsi che per qualsiasi percorso con OPTIONS
metodo il server invii una risposta con questa intestazione
Access-Control-Allow-Origin: *
Questo dirà al browser che il server è disposto a rispondere alle richieste da qualsiasi origine.
Per ulteriori informazioni su come aggiungere il supporto CORS al server, consultare il diagramma di flusso seguente
http://www.html5rocks.com/static/images/cors_server_flowchart.png
modifica 13/09/2018
La OPTIONS
richiesta CORS viene attivata solo in alcuni casi, come spiegato nei documenti MDN :
Alcune richieste non attivano un preflight CORS. Quelle sono chiamate "richieste semplici" in questo articolo, sebbene la specifica Fetch (che definisce CORS) non usi quel termine. Una richiesta che non attiva un preflight CORS, una cosiddetta "richiesta semplice", è una che soddisfa tutte le seguenti condizioni:
Gli unici metodi consentiti sono:
A parte le intestazioni impostate automaticamente dall'agente utente (ad esempio Connessione, Utente-Agente o una qualsiasi delle altre intestazioni con nomi definiti nelle specifiche di recupero come "nome di intestazione proibito"), le uniche intestazioni che possono essere impostati manualmente sono quelli che la specifica Fetch definisce come "intestazione di richiesta con elenco sicuro CORS", che sono:
- Accettare
- Accept-Language
- Content-Language
- Tipo di contenuto (ma notare i requisiti aggiuntivi di seguito)
- DPR
- downlink
- Salvare i dati
- Finestra-Width
- Larghezza
Gli unici valori consentiti per l'intestazione Content-Type sono:
- application / x-www-form-urlencoded
- multipart / form-data
- text / plain
Nessun listener di eventi è registrato su qualsiasi oggetto XMLHttpRequestUpload utilizzato nella richiesta; questi sono accessibili usando la proprietà XMLHttpRequest.upload.
Nessun oggetto ReadableStream viene utilizzato nella richiesta.