backbone.js и междоменный сценарий - PullRequest
20 голосов
/ 26 июня 2011

Я хочу работать с backbone.js и jquery.Предполагается, что приложение работает в автономном режиме на мобильных телефонах (например, "localhost"), в серверной части сервера есть несколько вызовов где-то в Интернете.

Каков наилучший способ реализации междоменных запросов с магистралью.js?

Я бы хотел использовать JSON, но я мог бы со временем переключиться обратно на REST, если это необходимо.

Вот мой не очень впечатляющий код:

App.Collections.Events = Backbone.Collection.extend({
   model: Event,    
   url: 'http://mydomain.com/api/getevents/user_id/1/'
});

1 Ответ

38 голосов
/ 27 июня 2011

Существует два способа разрешить междоменный XMLHttpRequests, который используется методом Backbone.js для получения данных из URL.Первый вариант подходит, если у вас есть контроль над серверной частью домена, не являющегося источником, к которому вы пытаетесь подключиться, и он включает в себя реализацию Cross-Origin Resource Sharing (или CORS).

Чтобы реализовать CORS, верните части 'Origin' заголовок запроса HTTP Referer (бит до начала path; он должен соответствовать регулярному выражению ^.+?\/{2}[^\/]*) в заголовке ответа Access-Control-Allow-Origin длядомены, которые вы хотите обслуживать:

 Access-Control-Allow-Origin: http://mydomain.com

Возможно, вам придется переопределить Backbone.sync , чтобы правильные настройки были установлены для объекта XMLHttpRequest.

Второй вариант, если у вас нет доступа к серверу перекрестного происхождения, - это прокси-запросы через ваш собственный сервер (исходный или тот, который включает CORS).Очевидно, что тот, кому принадлежит домен, который вы пытаетесь вызвать, может не захотеть, чтобы вы это делали, но это сделано специально - если они не хотят, чтобы вы вызывали вашу службу, у них есть только один IP-адрес для блокировки вместо каждого из ваших.IP клиента.

...