Perché è l’aggiunta di un’intestazione aggiuntiva che non consente la chiamata AJAX

Chiamata AJAX:

$.ajax({ url: "http://myserver2:296/api/Demo/HelloWorld", type: "GET", dataType: 'JSONP', jsonp: "callback", headers: { 'API_KEY': 'mykey09090' }, success: function (result) { console.log(result); }, error: ajaxFailed }); function ajaxFailed(xmlRequest) { alert(xmlRequest.status + ' \n\r ' + xmlRequest.statusText + '\n\r' + xmlRequest.responseText); } 

Ottengo il seguente errore: Failed to load resource: the server responded with a status of 403 (Forbidden) . Tuttavia, quando utilizzo Postman, devo solo aggiungere le intestazioni con l’URL http://myserver2:296/api/Demo/HelloWorld per restituire la stringa.

Posso ottenere assistenza per risolvere il problema.

Il mio objective è quello di consentire al server di origine insieme alla chiave API fornita correttamente di ottenere i dati dal Web Api.

L’ API_KEY dell’intestazione API_KEY alla richiesta triggers il browser per inviare prima una richiesta OPTION preflight CORS . Eventuali intestazioni aggiunte a una richiesta diverse dalle intestazioni definite come intestazioni di richieste CORS-safelisted attiveranno il browser per inviare una richiesta OPTION preflight CORS.

Non posso dirlo con certezza, ma sembra che il 403 che stai vedendo provenga dal tuo server che risponde a quella richiesta OPTIONS e che non si aspetta di ottenere richieste OPTIONS e non le consente.

Il motivo per cui non si ottiene questo da Postman è che a differenza dei motori di browser, Postman non implementa CORS, quindi non invia la richiesta OPTIONS. (Postman non funziona con il modello di sicurezza Web della stessa origine che i browser applicano per le applicazioni Web.)

Pertanto, per fare in modo che l’app client funzioni come previsto per l’accesso incrociato con script a quel server, è necessario configurare il server in modo che risponda nel modo corretto alla richiesta OPZIONI di preflight CORS.