2012-03-09 4 views
5

Sto tentando di consentire l'accesso a tutti i sottodomini sul mio sito per consentire chiamate incrociate AJAX sottodominio. C'è un modo per specificare tutti i sottodomini di un sito come *.example.com o, in alternativa, il motivo per cui esegue le seguenti operazioni non funziona quando ho più di un dominio elencato:Specificare più sottodomini con Origine controllo di accesso

header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com'); 

Ho letto attraverso la seguente questione che sembra essere simile , se non uguale a questo, a parte il fatto che voglio accedere ai sottodomini e questo si riferisce ai domini generali.

Access-Control-Allow-Origin Multiple Origin Domains?

Se la domanda di cui sopra è la soluzione a questo problema, allora come sono io in grado di recuperare l'origine dalla testata. Sembra che $ _SERVER ['HTTP_ORIGIN'] sia molto inaffidabile e nemmeno cross browser. Devo essere in grado di vedere l'origine in qualsiasi browser che potrebbe mostrare un errore quando si tenta di inviare una chiamata AJAX utilizzando javascript.

+0

Come hai detto, la prima parte della tua domanda viene risposta nel link. Per quanto riguarda la tua seconda domanda: se il browser tenta una chiamata Ajax che è vietata da criteri di dominio incrociato, la richiesta avrà esito negativo e non raggiungerà affatto il server. L'errore dovrà essere gestito nel browser. –

+0

Sono consapevole che riceverò un errore, ma questo errore verrà fornito dopo che la chiamata ha tentato di accedere al file esterno. Se il file lo rifiuta, verrà generato l'errore. Se imposto l'intestazione per consentire l'accesso a tutti, allora funzionerà, ma questo è troppo aperto per me quindi vorrei impostarlo in relazione all'origine della richiesta. Pertanto, vorrei sapere come ottenere l'origine della richiesta usando PHP. –

+0

Puoi approfondire cosa intendi con "$ _SERVER ['HTTP_ORIGIN'] è molto inaffidabile e nemmeno cross browser"? $ _SERVER ['HTTP_ORIGIN'] è un valore lato server che non viene eseguito nel browser. – monsur

risposta

18

La soluzione a questo problema consiste nell'utilizzare la variabile $ _SERVER ['HTTP_ORIGIN'] per determinare se la richiesta proviene da un dominio consentito. Ha quindi impostato questo:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
-2

Ecco un buon articolo sulla tua domanda: http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Se questo non è abbastanza buono o non funziona o avete bisogno di un proxy come questo: https://raw.github.com/cowboy/php-simple-proxy/master/ba-simple-proxy.php

quindi è possibile chiamare il proxy con i parametri ad esempio: http://www.example.com/ba-simple-proxy.php?url=https://api.example.com

+0

"Ecco un buon articolo sulla tua domanda" - Questo articolo non risolve affatto la domanda. – Quentin

+0

"Se questo non è abbastanza buono o non funziona o hai bisogno di un proxy come questo" - No. Un proxy non è necessario. Vedi la risposta accettata. – Quentin