2013-01-04 35 views
9

Pracuję z Flickr REST API i działa prawidłowo, przez co rozumiem ja wykonać połączenie AJAX do API Flickr, uzyskać obiekt JSON, ja analizowania obiektu itpW jaki sposób interfejs REST API działa z javascript, gdy w przeglądarce działa zasada pochodzenia w tej samej domenie?

Ale teraz zadać pytanie: jeśli przeglądarki są zgodne z Same_origin_policy, w jaki sposób możemy zażądać tego typu API?

This DEMO prace ale to wysłać żądanie krzyż domeny do domeny Flickr

Może ktoś mi powiedzieć jaki sposób ten krzyż pracy prośba domeny?

Zapytanie Krzyż Domain

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

Odpowiedz

10

Co trzeba zrozumieć, jest to, że podczas przeglądarek zrobić egzekwować zasady tego samego źródła (SPO), istnieją wyjątki, gdy SOP nie jest egzekwowane. Na przykład, jeśli masz stronę HTML - możesz wstawiać tagi, które wskazują na obrazy w dowolnej domenie. Dlatego SOP nie ma tutaj zastosowania, a Ty tworzysz żądanie HTTP GET dla pierwszego źródła dla obrazu.

Demo połączone z pracami, ponieważ używa mechanizmu działającego w podobny sposób. Mechanizm ten nazywa się JSONP - http://en.wikipedia.org/wiki/JSONP i sugeruję, abyś przeczytał wpis wiki i kilka innych postów na blogu. Zasadniczo JSONP dynamicznie wstrzykuje znaczniki <script>, aby wysłać żądanie do dowolnej domeny (parametry żądania są dodawane jako parametry zapytania URL), ponieważ ta sama polityka pochodzenia nie ma zastosowania do tagów <script> (ponieważ nie ma zastosowania do tagów ).

Innym sposobem wywoływania interfejsów REST API w innych domenach jest użycie mechanizmu współdzielenia zasobów (CORS) - http://en.wikipedia.org/wiki/Cross-origin_resource_sharing. Zasadniczo mechanizm ten umożliwia, że ​​przeglądarki nie odrzucają żądania różnych źródeł, ale raczej proszą usługę docelową, jeśli chce zezwolić na konkretne żądanie połączenia. Usługa docelowa informuje przeglądarkę, że chce dopuszczać żądania różnych źródeł, wstawiając w odpowiedzi specjalne nagłówki HTTP:

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

Świetna odpowiedź, Iwan. Moje pytanie brzmi: czy w JavaScript, jakikolwiek REST API, który zużywa, wymaga mechanizmu takiego jak powyższe przykłady? Czy w celu ponownego sformułowania, wszyscy programiści REST API powinni wziąć pod uwagę kwestię Cross-Origin podczas ich opracowywania? – technophyle

+0

@technophyle - tak, to prawda. Na zdalne żądania JavaScript w przeglądarce wpływa SOP, więc deweloperzy API powinni rozważyć, czy API ma być dostępny dla takich klientów. –