#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. Виктор: да, это не зависит от браузера.