2014-10-16 8 views
15

So che ci sono già molte domande relative a CORS ma non sembrano rispondere la mia domanda.Angularjs: non è possibile utilizzare un carattere jolly "*" nell'intestazione "Access-Control-Allow-Origin" quando il flag delle credenziali è true

Quindi ho un'app client scritta in AngularJS che verrà utilizzata per creare un'app mobile (con Apache Cordova). I file html e i file JavaScript verranno caricati dal dispositivo mobile. Quando lo simulo e invio richieste al server API REST, ho ricevuto per la prima volta "Nessuna intestazione Access-Control-Allow-Origin" è presente sulla risorsa richiesta. L''http://localhost:82' origine non è quindi consentito l'accesso ". Così ho aggiunto l'intestazione ("Access-Control-Allow-Origin: *"); nel mio server API REST php. Non riesco a specificare un dominio specifico in quanto le richieste arriveranno dai dispositivi mobili.

Ora ho ottenuto "Un carattere jolly" * "non può essere utilizzato nell'intestazione" Access-Control-Allow-Origin "quando il flag delle credenziali è true."

Ho finalmente trovato una soluzione ma non sono sicuro che sia sicuro tenerlo così.

Nel mio php REST API server ho aggiunto questo:

if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Credentials: true"); 
    header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']); 
    header("Access-Control-Allow-Headers: *, X-Requested-With, Content-Type"); 
    header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT"); 
} 

Si prega di avvisare in questo modo di lavorare. Se non è sicuro o non funziona affatto, puoi dirmi come risolvere questo problema?

Grazie mille!

+0

Sei sicuro di dover impostare Access-Control-Allow-Credentials: vero, maggiori informazioni su quell'intestazione: http://stackoverflow.com/a/24689738/1956540 – BatteryAcid

+1

Non so se lo sai o no, ma " flag di credenziali è true "non fa riferimento a un'intestazione' Access-Control-Allow-Credentials: true' sulla risposta - si riferisce a 'request.withCredentials = true'. (http://stackoverflow.com/questions/34078676/access-control-allow-origin-not-allowed-when-credentials-flag-is-true-but/42108718#42108718) – Andy

risposta

10

La risposta deve avere solo le intestazioni accettate in Access-Control-Allow-Headers, non utilizzare caratteri jolly.

Per quanto essendo sicuro, notare il commento da @Jules in questo post about CORS:

Si noti che l'invio del valore di origine HTTP indietro come l'origine consentito permetterà a chiunque di inviare le richieste a voi con cookie, quindi potenzialmente rubare una sessione da un utente che ha effettuato l'accesso al tuo sito e ha visualizzato la pagina di un utente malintenzionato. O vuoi inviare '*' (che impedirà i cookie prevenendo così il furto della sessione) o i domini specifici per i quali vuoi che il sito funzioni.

Vedere anche i seguenti esempi:

Wildcard not accepted in Access-Control-Allow-Headers

Specify headers Access-Control-Allow-Headers


approccio alternativo

Si può solo impostare l'intestazione origine:

Access-Control-Allow-Origin: * 

Se non è necessario includere i cookie nella richiesta di rimozione:

Access-Control-Allow-Credentials: true 

Rimuovere il jolly da Access-Control-Allow-intestazioni e aggiungere l'autorizzazione e quindi passare tale intestazione come parte di la tua richiesta di autorizzazione, invece di passare le credenziali in un cookie, ex:

Authorization: Basic a2lkMT== 

Inoltre, aggiungere le opzioni di modalità consentite.

+1

Come descritto "Access-Control-Allow -Origin: * "non funziona. Mi servono i cookie e la combinazione di "Access-Control-Allow-Origin: *" e l'invio di cookie sembra non essere consentito. – mvermand

+1

Ok, se si desidera utilizzare Allow-Credentials, non è possibile utilizzare il carattere jolly: http://stackoverflow.com/a/19744754/1956540 – BatteryAcid

+0

risposta aggiornata per riflettere meglio la domanda – BatteryAcid

Problemi correlati