Обход политики того же источника браузера с помощью прокси-сервера в приложении Rails 3

#ruby-on-rails #nginx #same-origin-policy

#ruby-on-rails #nginx #политика того же источника

Вопрос:

Я ищу решение rails, которое может использовать несколько удаленных служб XML, передавая динамические параметры запроса и выводя ответ в виде XML или JSON.

Я просмотрел TinyProxy (не могу установить его в OSX через macports), а также Nginx. Похоже, что Nginx сделает то, что мне нужно, а также предоставит нам гибкость в дальнейшем при балансировке нагрузки и т.д.

У кого-нибудь еще есть опыт в этом? Есть ли проверенные решения?

Ответ №1:

Вместо использования прокси-сервера одним из стандартных решений, основанных на политике того же источника, являются динамические теги скриптов и обратные вызовы JSON.

Например: ваша страница page хочет запросить API на remotesite.com и вы пытаетесь выполнить вызов ajax для http://remotesite.com/api?query=list но вы получаете ошибку того же источника. Чтобы обойти ограничение, вы могли бы добавить тег script в DOM (используя JS), который указывает на URL, подобный этому:

 var e = document.createElement('script');
e.src = 'http://remotesite.com/api?query=list';
document.getElementById('fb-root').appendChild(e);
  

Затем браузер выполнит этот запрос — то же самое, что вы пытались сделать с помощью вызова ajax. Теперь загвоздка в том, что вам нужно, чтобы ответ вызывал одну из ваших функций js с данными, возвращаемыми в качестве аргумента. Таким образом, запрос вернул бы что-то вроде:

 callbackFunctionname({...json_data_here...});
  

Теперь в вашем коде у вас была бы функция, подобная этой:

 function callbackFunctionname(json_string)
{
   //you have result from cross domain ajax request.
}
  

Комментарии:

1. Неплохо. Поддерживается ли это во всех браузерах?

2. Виктор: да, это не зависит от браузера.