Avevo sviluppato un'app PhoneGap che ora viene trasformata in un sito Web mobile. Tutto funziona senza problemi oltre a un piccolo problema. Uso una determinata API di terze parti tramite una richiesta POST, che funziona bene nell'app, ma non riesce nella versione del sito Web mobile.Come saltare la richiesta di preflight OPTIONS in AngularJS
Dopo uno sguardo ravvicinato, sembra che AngularJS (suppongo che il browser in realtà) stia inviando prima una richiesta OPTIONS. Oggi ho imparato molto su CORS, ma non riesco a capire come disabilitarlo del tutto. Non ho accesso a tale API (quindi i cambiamenti da quel lato sono impossibili), ma hanno aggiunto il dominio su cui sto lavorando alla loro intestazione Access-Control-Allow-Origin.
Questo è il codice che sto parlando:
var request = {
language: 'fr',
barcodes: [
{
barcode: 'somebarcode',
description: 'Description goes here'
}
]
};
}
var config = {
headers: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/json'
}
};
$http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {
callback(undefined, data);
}).error(function(data, status) {
var err = new Error('Error message');
err.status = status;
callback(err);
});
Come posso impedire che il browser (o AngularJS) di inviare quella richiesta OPTIONS e saltare per la richiesta POST reale? Sto usando AngularJS 1.2.0.
Grazie in anticipo.
Questa è la risposta corretta: le intestazioni Content-Type e Cache-Control stanno attivando una richiesta di verifica preliminare. Un semplice GET con un Content-Type di text/plain e pochi altri sono gli unici modi per attivare una richiesta non preflight. Vedi: https: //developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS#Preflighted_requests –
Ah sì, ho dimenticato di Cache-Control. –
Un'intestazione personalizzata attiverà anche il preflight. –