JavaScript – XMLHttpRequest, Access-Control-Allow-Origin errori

Sto tentando di inviare un XMLHttpRequest a un sito di incolla. Sto inviando un object contenente tutti i campi richiesti dall’API, ma continuo a ricevere questo problema. Ho letto il problema e ho pensato:

httpReq.setRequestHeader('Access-Control-Allow-Headers', '*'); 

Lo aggiusterei, ma non lo fece. Qualcuno ha qualche informazione su questo errore e / o su come posso risolverlo?

Ecco il mio codice:

 (function () { 'use strict'; var httpReq = new XMLHttpRequest(); var url = 'http://paste.ee/api'; var fields = 'key=public&description=test&paste=this is a test paste&format=JSON'; var fields2 = {key: 'public', description: 'test', paste: 'this is a test paste', format: 'JSON'}; httpReq.open('POST', url, true); console.log('good'); httpReq.setRequestHeader('Access-Control-Allow-Headers', '*'); httpReq.setRequestHeader('Content-type', 'application/ecmascript'); httpReq.setRequestHeader('Access-Control-Allow-Origin', '*'); console.log('ok'); httpReq.onreadystatechange = function () { console.log('test'); if (httpReq.readyState === 4 && httpReq.status === 'success') { console.log('test'); alert(httpReq.responseText); } }; httpReq.send(fields2); }()); 

Ed ecco l’esatto output della console:

 good ok Failed to load resource: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:40217' is therefore not allowed access. http://paste.ee/api XMLHttpRequest cannot load http://paste.ee/api. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:40217' is therefore not allowed access. index.html:1 test 

Ecco l’output della console quando eseguo il test localmente su un normale browser Chromium:

 good ok XMLHttpRequest cannot load http://paste.ee/api. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. index.html:1 test 

Penso che tu abbia perso il punto di controllo degli accessi.

Un breve riepilogo del motivo per cui CORS esiste: poiché il codice JS di un sito Web può eseguire XHR, quel sito potrebbe potenzialmente inviare richieste ad altri siti , mascherando come te e sfruttando la fiducia che tali siti hanno in te (ad esempio se hai effettuato l’accesso, un malintenzionato sito potrebbe tentare di estrarre informazioni o eseguire azioni che non hai mai voluto) – questo è chiamato un attacco CSRF. Per evitare ciò, i browser Web hanno limitazioni molto stringenti su quale XHR è ansible inviare – in genere si limita solo al proprio dominio e così via.

Ora, a volte è utile che un sito consenta ad altri siti di contattarlo: i siti che forniscono API o servizi, come quello a cui stai tentando di accedere, potrebbero essere i primi candidati. CORS è stato sviluppato per consentire al sito A (ad es. paste.ee ) di dire “Confido nel sito B, quindi puoi inviare XHR da questo a me”. Questo è specificato dal sito A che invia intestazioni “Access-Control-Allow-Origin” nelle sue risposte.

Nel tuo caso specifico, sembra che paste.ee non si preoccupi di usare CORS. La soluzione migliore è contattare il proprietario del sito e scoprire perché, se si desidera utilizzare paste.ee con uno script del browser. In alternativa, puoi provare a usare un’estensione (quelli con privilegi XHR più alti).

Ho avuto lo stesso problema. I log dei server hanno mostrato:

 DEBUG: <-- origin: null 

Ho studiato questo e si è verificato che questo non è popolato quando ho chiamato da file dal disco locale. Quando ho copiato il file sul server e l'ho usato dal server, la richiesta ha funzionato perfettamente