Come funzionano i mashup con i criteri della stessa origine?

11

Se Javascript è autorizzato ad accedere agli script dallo stesso dominio, come può un sito Web creare mashup che devono leggere e modificare il contenuto da un altro dominio?

    
posta Jack Richardson 15.10.2011 - 06:59
fonte

2 risposte

7

Soluzioni cross-browser

JSONP

Se l'API a cui stai tentando di accedere supporta JSONP , devi solo fornire un nome funzione javascript nella tua richiesta, quindi il JSONP restituisce javascript come myfunc({the:data}); che puoi eseguire come javascript regolare, ecco perché dovresti creare un nuovo tag <script src="www.website.com/somecall?jsonp=myfunc"> per "inviare una richiesta" (jQuery lo fa automaticamente se usi type: jsonp in% richieste di$.ajax).

Lo svantaggio è che richiede il provider dell'API per supportare JSONP.

Flash

Flash può accedere ai contenuti tra domini finché il sito web di destinazione ha un file crossdomain.xml nella radice che dice che lo consente, che di solito è il caso sui server che forniscono un'API).

Lo svantaggio è che richiede Flash nel browser dell'utente e che il sito web dal quale si ottengono i dati deve avere un crossdomain.xml che consente le richieste tra domini.

Script sul lato server con lo stesso nome di dominio

I linguaggi lato server come PHP non hanno restrizioni dello stesso dominio BS, quindi potresti avere uno script che funge da proxy (ad esempio, scaricare tramite una delle estensioni http come cURL).

Il vantaggio ulteriore è che puoi pulire i dati (o persino mashup di più fonti) sul server, prima di inviarli alla tua pagina web / javascript, in modo da poter estrarre solo la parte utile dei dati, che è piacevole quando fare webapp mobile dove la larghezza di banda può essere un problema.

Lo svantaggio è che tutte le richieste devono passare attraverso il tuo server, in modo che aumenti il carico sul tuo server.

Tuttavia, il vantaggio è che funzionerebbe con qualsiasi risorsa in quanto non richiede che l'obiettivo supporti il crossdomain o jsonp. Quindi se nient'altro funziona, lo farebbe.

Soluzioni specifiche per alcuni browser

Internet Explorer

Internet Explorer ha Richiesta interdominio

Firefox

Firefox 3.5+ ha lo standard di condivisione incrociata , ma richiede la risorsa a cui stai tentando di accedere includere intestazioni speciali, ad es in PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

Alcuni altri principali browser supportano anche questo , quindi se non hai bisogno di supportare i vecchi browser e se riesci a ottenere le risorse a cui stai cercando di accedere per inviare quelle intestazioni, questa potrebbe essere la soluzione migliore, altrimenti lo script sul lato server sarebbe la mia raccomandazione.

Firefox ha anche un'impostazione utente capability.policy.default.XMLHttpRequest.open , ma non conterei sull'utente che modifica un'impostazione nel suo browser.

    
risposta data 15.10.2011 - 18:21
fonte
0

Puoi usare l'API (di un altro dominio) per quello. Il tuo Javascript chiamerà il file PHP (o altro file di script) che si trova sul tuo server web (il tuo dominio), che chiamerà l'API (di un altro dominio usando CURL) e ti risponderà.

    
risposta data 15.10.2011 - 14:18
fonte

Leggi altre domande sui tag