2012-09-22 8 views
16

Desidero servire i miei script JavaScript da un CDN come cloudflare.Politica Same-Origin e pubblicazione JS da un CDN

Ora i miei script comunicano con il mio server dell'app tramite ajax. Non entrerebbero in gioco le restrizioni della politica dell'origine stessa quando caricherò questi script da un CDN?

Diciamo che la mia app è sul dominio:

http://app.com 

E io caricare i miei script da

http://cdn.com/xyz/all.js 

Ora, dal momento che i miei script vengono caricati da un dominio diverso da quello del dominio mia app è a partire da, credo che la stessa politica di origine mi avrebbe impedito di fare una comunicazione jax con la mia app.

Sto ricevendo qualcosa di sbagliato?

risposta

19

No, funzionerà. Ecco perché funziona JSONP. "L'origine" dello script è la pagina in cui viene eseguita, non da dove proviene.

Come avete chiesto voi, ecco una di riferimento (non sono riuscito a trovare niente di meglio, ma Crockford è ben noto)

L'attributo src, sorprendentemente, non è vincolata dalla stessa politica di origine. Ciò significa che è possibile creare un elemento di script che può andare su qualsiasi server, recuperare uno script ed eseguirlo. Se lo script causa il recapito di dati con codifica JSON, questa è una cosa molto utile. Sfortunatamente, non c'è modo di limitare lo script o di controllarlo prima che venga eseguito. Funziona con la stessa autorità degli script della pagina. Quindi lo script può accedere e utilizzare i suoi cookie. Può accedere al server di origine utilizzando l'autorizzazione dell'utente. Può ispezionare il DOM e l'oggetto globale di JavaScript e inviare tutte le informazioni che trova in qualsiasi parte del mondo. The Script Tag Hack non è sicuro e dovrebbe essere evitato.

http://javascript.crockford.com/script.html

Non

davvero un punto di riferimento: Se questo non avrebbe funzionato, nessuno potrebbe includere jQuery dal CDN di Google e quindi utilizzare è $.ajax metodo.

+0

Il motivo per cui JSONP funziona è che puoi ** OTTIENI ** script da qualsiasi luogo. Ma quello che devo fare è ** POST ** su un server con dominio diverso rispetto all'origine dello script. Per favore chiarisci la tua risposta un po 'di più – treecoder

+0

Ora stai mescolando due cose. Lo script viene recuperato utilizzando * GET * dal CDN. Dopodiché, risiede nel dominio di app.com – Prinzhorn

+0

Non so cosa non sto ottenendo qui, ma uno script caricato dal dominio A NON può inviare dati al dominio B giusto? Se ho ragione, come può uno script caricato da CDN parlare con un dominio completamente diverso del server dell'app? – treecoder