Domanda

Ho installato Resource Sharing Cross-Origin su un server (molo utilizzando il CrossOriginFilter) e funziona perfettamente su IE8 e Firefox. Su Chrome, semplicemente ... non fa.

  $.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    dataType :  "json" } );

La funzione di errore viene richiamato, con il messaggio "errore" utile. Sembra essere che effettua la richiesta, ma senza alcuna delle intestazioni che ci si aspetta. Se l'URL è dalla stessa origine, funziona benissimo.

È stato utile?

Soluzione 3

quello che finalmente ha funzionato per me è xhr.setRequestHeader('Content-Type', 'text/plain');

Altri suggerimenti

Ho risolto il mio problema in questo modo:

Aggiungi questo al vostro codice PHP:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");

o aggiungere queste intestazioni per la vostra risposta.

. Problema: I browser chiedono al server per le opzioni prima della richiesta principale, per verificare se il sito ha la possibilità di consentire comunicazione con origine diversa, e poi, se sì, lo fanno il vostro POST o GET richiesta

Modifica Prova questo (senza il vostro hack) per vedere se si sta ricevendo i dati ...

$.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    success : function(data) {
        alert(data);
    },
    dataType :  "text"} );

Sembra che il manifesto originale potrebbe essere risolto il loro problema, ma per chiunque abbia lo stesso problema come commentor Elisabeth, credo che il problema potrebbe essere che Chrome si rifiuta di impostare un colpo di testa di origine per un CORS richiesta Se si esegue il richiedere da un file locale. Non sarà nemmeno permetterà di ignorare in modo esplicito l'intestazione di origine. Questo fa sì che il server per vedere "Origine: null", che si traduce in un 403 nella maggior parte dei casi. Firefox ha apparentemente alcun tale vincolo, come ho trovato dopo molto tirate di capelli.

Se è assolutamente necessario utilizzare Chrome in questo caso, è possibile risolvere il problema eseguendo un webserver a livello locale e sempre accesso al tuo file tramite http: anziché tramite file:.

Nel mio caso, si tratta di localhost: 8001 (front-end), che tenta di chiamare le API a localhost: 7001 (su server.js come server Node). Anche io avevo le CORS plugin installato e accesi su Chrome, ancora la politica CORS li ha respinti come casi di verifica preliminare.

Mi ci sono voluti più di mezza giornata per finalmente risolvere il problema. Ecco i passaggi "stupido", che ci crediate o no:

i. Spegnere il CORS plug, ricaricare l'applicazione, in questo momento si dovrebbe comunque ottenere gli errori che sono corrette.

II. Riattivarlo, ricaricare l'applicazione, se le API hanno successo, fermata qui, non c'è bisogno di procedere a III.

III. Tuttavia, se è ancora ottenere il rifiuto CORS, quindi disinstallare Chrome e l'installazione di un up-to-date Chrome.

IV. Sul nuovo Chrome, i CORS precedentemente installati plugin dovrebbe essere ancora lì, ma con lo stato OFF.

v. Ricaricare la pagina, si dovrebbe ottenere i messaggi CORS rifiuto sulla console, che siano corrette.

VI. Riattivarlo, ricaricare la pagina, gli errori dovrebbero scomparire.

Non ho altre idee, se i passaggi precedenti ancora non funzionano nel tuo caso.

Inoltre ho provato quanto segue su server.js (nodo) e ancora non funzionano, quindi non la briga di provare:

var app = express();
var cors = require('cors'); // Already done “npm i cors --save-dev”
app.options('*', cors());

Quando ho aggiornato il cromo stavo affrontando il problema, ho risolto Google Extension "Access-Control-allow-credenziali" nuova versione. se si tratta di una vecchia versione, non sarà necessario lavorare su una nuova versione di Google Chrome

https://chrome.google .com / webstore / detail / access-control-allow-cred / hmcjjmkppmkpobeokkhgkecjlaobjldi? hl = it

Controlla per assicurarsi che non è stato impostato il server sia per consentire le credenziali e si imposta la permettono intestazione origine *. Come di seguito:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Se il server restituisce questi valori per queste intestazioni, allora non funzionerà. Se si imposta Access-Control-Allow-Credentials a true, allora non è possibile utilizzare *as il valore dell'intestazione Access-Control-Allow-Origin. Qui di seguito è un estratto dalle webdocs MDN per l'intestazione ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin ):

For requests without credentials, the literal value "*" can be specified, as a wildcard; 
the value tells browsers to allow requesting code from any origin to access the resource. 
Attempting to use the wildcard with credentials will result in an error.

Se quanto sopra è il caso, è sufficiente impostare Access-Control-Allow-Credentials a false.

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false

Riferimenti

CORS lavorerà in cromo. Basta utilizzare Chrome è safe-mode, cioè, utilizzare le impostazioni di sicurezza disabilitare. Google su di esso, o si può anche iniziare da linea di comando anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top