Одинаковая политика происхождения для jQuery против браузера (с OData) - PullRequest
3 голосов
/ 02 ноября 2010

Я создаю приложение AJAX для запроса конечной точки OData.Я провел некоторое тестирование с помощью канала Netflix OData и обнаружил что-то, чего не получил:

Когда я делаю запрос .ajax () к URL (например, http://odata.netflix.com/v1/Catalog/Titles), я получаюошибка: «Нулевой источник не разрешен Access-Control-Allow-Origin». Однако, когда я вставляю тот же URL в браузер, запрос проходит, и я получаю ответ.

В чем здесь принципиальная разница?что я не получаю? Как браузер обходит ту же политику происхождения?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

Я также использовал JSONP для OData Netflix. Похоже, отлично работает для моего приложения. Я разместил код и объяснение в моем блоге http://bit.ly/95HXLM

Ниже также приведен пример фрагмента:

49.        // Make JSONP call to Netflix
50.     $.ajax({
51.            dataType: "jsonp",
52.            url: query,
53.            jsonpCallback: "callback",
54.            success: callback
55.            });
56.        });
57. 
58.    function callback(result) {
59.        // unwrap result
60.        var movies = result.d.results;
61. 
62.        $("#movieTemplateContainer").empty();
63.        $("#movieTemplate").tmpl(movies).appendTo("#movieTemplateContainer");
64.    }
1 голос
/ 02 ноября 2010

Такая же политика происхождения применяется к HTTP-запросам, исходящим из кода, загруженного страницами с удаленных сайтов. Этот код запрещен машиной для выдачи новых запросов на контент из разных доменов, при условии, что вы, пользователь под контролем, были в порядке с загрузкой контента из haxors.r.us, но вы не хотели бы, чтобы этот сайт выдавал HTTP-запросы к bankofamerica.com без вашего согласия. Тем не менее, браузер должен позволять вам, контролирующему пользователю, отправлять HTTP-запросы в любое место. Действительно, когда Человечество исчезает в тени Машины, я требую этого. Я требую этого!

Вы можете отправлять запросы на этот URL-адрес с вашего сервера , а затем передавать ответ на ваш код на клиенте (после любой фильтрации или извлечения кода, который ваш сервер может выбрать). В качестве альтернативы Netflix может поддерживать JSONP API, который позволит вашему клиентскому коду отправлять запросы GET в виде выборок скриптов, а результаты интерпретировать как код Javascript.

Также следует отметить, что эта политика не имеет никакого отношения к самой jQuery. Это базовое правило безопасности в механизме XMLHttpRequest.

...