2012-05-02 1 views
0

У меня есть служба REST, сидящая на http://restservice.net. Я реализую клиент для этой службы в магистрали. Клиент - это просто html-файл (для загрузки приложения) и куча js-файлов, содержащих мой код backbonejs. Я размещаю эти файлы на другом сайте http://client.net.Backbonejs - ошибка CORS

Код моей обратной связи звонит в http://restservice.net, но теперь разрешен из-за same origin policy. Я уже рассмотрел другие вопросы, которые говорят о том, как я могу говорить только с http://client.net.

Должен ли я перенаправлять каждый запрос через http://client.net. Я считаю это неэффективным. Какой смысл использовать клиентскую среду MVC? Я что-то упустил?

+0

Поддерживает ли 'restservice.net' JSONP? –

+0

Это мое обслуживание, поэтому я могу заставить его поддерживать 'JSNOP', но тогда как заставить' Backbonejs' работать с 'JSONP'? – Suhas

ответ

5

У вас есть два варианта: JSONP и CORS оба требуют, чтобы ваш сервер http://restservice.net был настроен для поддержки протоколов. Принуждение к использованию JSONP просто требует передачи опции Backbone.sync. Один из способов сделать это так:

sync: function(method, model, options){ 
    options.dataType = "jsonp"; 
    return Backbone.sync(method, model, options); 
} 

Проблема с JSONP в том, что вы можете сделать только запросы GET, так что ваш REST API эффективно только для чтения. Чтобы получить работу CORS, вам просто нужно настроить сервер api для отправки правильных заголовков. Это будет довольно либеральным:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE OPTIONS 

here is a pretty good run down на CORS. Если вы это настроите, все будет работать как обычно.

Если у вас нет возможности вносить изменения на сервер по адресу http://restservice.net, тогда у вас нет выбора, кроме как прокси-сервер всех запросов к этой услуге. Это определенно неэффективно, но реализация, вероятно, проще, чем вы ожидали. Следует рассмотреть одну вещь: reverse proxy

+1

Просто добавьте, что для поддержки 'JSONP' вам нужно внести изменения в формат вашего ответа, вы больше не можете отвечать _pretty_ и _clean_ JSON, но с вызовом функции _dirty_ javascript. Я действительно перейду на 'CORS' всегда, что возможно. – fguillen

Смежные вопросы