Come funzionano i mashup con la stessa politica di origine?


Risposte:


7

Soluzioni cross-browser

JSONP

Se l'API a cui stai tentando di accedere supporta JSONP , devi solo fornire un nome della funzione javascript nella tua richiesta, quindi JSONP restituisce javascript come il myfunc({the:data});quale puoi eseguire come un normale javascript, motivo per cui dovresti creare un nuovo <script src="www.website.com/somecall?jsonp=myfunc">tag per "invia una richiesta" (jQuery lo fa automaticamente se lo usi type: jsonpnelle $.ajaxrichieste).

Il rovescio della medaglia è che richiede il provider dell'API per supportare JSONP.

Veloce

Flash può accedere ai contenuti tra domini purché il sito Web di destinazione abbia un crossdomain.xmlfile alla radice che dice che lo consente, come di solito accade sui server che forniscono un'API).

L'aspetto negativo è che richiede Flash nel browser dell'utente e che il sito Web da cui si ottengono i dati deve avere un crossdomain.xml che consenta le richieste tra domini.

Script 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 es. Download tramite una delle estensioni http come cURL).

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

Il rovescio della medaglia è che tutte le richieste devono passare attraverso il tuo server, in modo da aumentare 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, questo sarebbe.


Soluzioni specifiche per alcuni browser

Internet Explorer

Internet Explorer ha una richiesta tra domini

Firefox

Firefox 3.5+ ha lo standard di condivisione tra le origini , ma richiede la risorsa a cui stai tentando di accedere per includere intestazioni speciali, ad esempio 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 vecchi browser e se riesci a ottenere le risorse a cui stai tentando di accedere per inviare quelle intestazioni, questa potrebbe essere la tua scommessa migliore, altrimenti il ​​lato server la sceneggiatura sarebbe la mia raccomandazione.


Anche Firefox ha un'impostazione utente capability.policy.default.XMLHttpRequest.open, ma non vorrei che l'utente modificasse un'impostazione nel suo browser.


0

Per questo puoi usare l'API (di un altro dominio). 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à.


Questa risposta non deve essere così specifica sulla tecnologia utilizzata sul server.
funkybro,

@funkybro sì, era solo un esempio ... niente di specifico ...
Harish Kurup,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.