2013-01-04 9 views
9

Sto lavorando con Flickr API REST e funziona bene, e con questo intendo io faccio una chiamata AJAX per il Flickr API, ottengo un oggetto JSON, ho analizzare l'oggetto, eccCome funziona un'API REST con javascript quando esiste una politica di origine dello stesso dominio per il browser?

Ma ora io hai una domanda: se i browser seguono Same_origin_policy, come possiamo richiedere questo tipo di API?

This DEMO opere ma inviare una richiesta croce dominio al dominio Flickr

Uno può dirmi come fa questa croce dominio richiesta di lavoro?

Richiesta tra domini

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?id=" + id + "&lang=en-us&format=json&jsoncallback=1"); 

risposta

10

Quello che dovete capire è che, mentre i browser fanno applicare la stessa politica di origine (SOP), ci sono eccezioni quando SOP non viene applicata. Ad esempio, se si dispone di una pagina HTML, è possibile inserire i tag <img> che puntano a immagini su qualsiasi dominio. Pertanto, il SOP non si applica qui e si sta facendo una richiesta HTTP GET di origine incrociata per un'immagine.

La demo che hai collegato funziona in quanto utilizza un meccanismo che funziona in modo simile. Il meccanismo si chiama JSONP - http://en.wikipedia.org/wiki/JSONP e ti suggerisco di leggere la voce wiki e alcuni altri post del blog. In sostanza, JSONP inietta dinamicamente i tag <script> per inviare una richiesta a qualsiasi dominio (i parametri della richiesta vengono aggiunti come parametri di query URL), poiché lo stesso criterio di origine non si applica ai tag <script> (poiché non si applica ai tag <img>).

Un altro modo per richiamare API REST su altri domini è utilizzare il meccanismo di condivisione delle risorse tra origini (CORS) - http://en.wikipedia.org/wiki/Cross-origin_resource_sharing. In sostanza, questo meccanismo consente ai browser di non negare la richiesta di origine incrociata, ma piuttosto di chiedere al servizio di destinazione se vuole consentire una specifica richiesta di origine incrociata. Il servizio di destinazione indica al browser che desidera consentire le richieste di origine incrociata inserendo intestazioni HTTP speciali nelle risposte:

Access-Control-Allow-Origin: http://www.example.com 
+0

Ottima risposta, Ivan. La mia domanda è, stai dicendo, in JavaScript, qualsiasi API REST che consuma richiede un meccanismo come gli esempi precedenti? O per riformulare, tutti gli sviluppatori di API REST dovrebbero considerare il problema di Cross-Origin durante lo sviluppo? – technophyle

+0

@technophyle - sì, pensa di sì. Le richieste remote effettuate da JavaScript nel browser sono influenzate da SOP, quindi è qualcosa che deve essere considerato dagli sviluppatori API se vogliono che l'API sia disponibile per tali client. –

Problemi correlati