2009-05-30 14 views
13

Diciamo che ho un dominio, js.mydomain.com, e punta a qualche indirizzo IP, e qualche altro dominio, requests.mydomain.com, che punta a un indirizzo IP diverso. È possibile che un file .js scaricato da js.mydomain.com effettui richieste Ajax a requests.mydomain.com?In che modo viene applicata la politica dello stesso dominio?

In che modo esattamente i browser moderni applicano i criteri dello stesso dominio?

risposta

11

La risposta breve alla domanda è no: per le chiamate AJAX, è possibile accedere solo allo stesso hostname (e porta/schema) dal momento del caricamento della pagina.

Ci sono un paio di soluzioni alternative: una è creare un URL in foo.example.com che funge da proxy inverso per bar.example.com. Il browser non si cura dove la richiesta è effettivamente soddisfatta, purché il nome host corrisponda. Se si dispone già di un server Web Apache front-end, questo non sarà troppo difficile.

Un'altra alternativa è AJAST, che funziona inserendo tag di script nel documento. Credo che questo sia il modo in cui funzionano le API di Google.

Troverete una buona descrizione della stessa politica di origine qui: http://code.google.com/p/browsersec/wiki/Part2

+0

Grazie! Questo ha aiutato molto - AJAST sembra un'ottima opzione. –

+0

FWIW, IE generalmente non si preoccupa della porta. http://blogs.msdn.com/ieinternals/archive/2009/07/23/The-IE8-Native-XMLHttpRequest-Object.aspx – EricLaw

+3

Vale anche la pena ricordare che l'indirizzo IP non ha importanza (in qualsiasi browser) - - È SOLO il protcol/schema, host e (in alcuni casi) porta che determinano l'origine. Ciò significa che due origini diverse fornite dallo stesso IP * potrebbero non * comunicare, e che la stessa origine è servita su più IP un servizio di bilanciamento del carico * potrebbe * comunicare. – EricLaw

1

Questo non funziona perché il nome host è diverso. Due pagine sono considerate della stessa origine se hanno lo stesso host, protocollo e porta.

Da Wikipedia su the same origin policy:

Il termine "origine" è definito utilizzando il nome dominio, livello di applicazione protocollo e (nella maggior parte dei browser) TCP porta del documento HTML che esegue lo script . Due risorse sono considerate di essere della stessa origine se e solo se tutti questi valori sono esattamente lo stesso.

Problemi correlati