Реализация HTTP-прокси для преодоления ограничений межсайтовых запросов AJAX (?) - PullRequest
7 голосов
/ 23 февраля 2011

У меня есть веб-приложение Spring-MVC (3.0.5-RELEASE), которому требуется доступ к веб-сервисам JSON из другого веб-приложения в другом поддомене (из клиента / браузера через AJAX).

В прошлом я решал это либо:

  1. написанием простого контроллера, который проксирует запросы, используя Apache Commons HttpClient для обработки запросов.Таким образом, преодоление ограничений безопасности межсайтового / межсайтового запроса большинства браузеров

  2. , реализующих службу JSONP на стороне сервера (при вызове наших собственных служб JSON) - не всегда возможно

В случае, когда JSONP невозможен, есть ли лучший способ сделать (1.)?

и / или

Есть ли библиотекачто справится с этим для меня?Так что мне не нужно писать весь код HttpClient сам - его не так много, но мне интересно, если (плохо) я заново изобретаю колесо.

1 Ответ

0 голосов
/ 19 апреля 2013

Мне часто приходилось использовать сторонние веб-сервисы (API), и, как вы упомянули, JSONP не всегда является вариантом.Вот как я занимаюсь проектированием:

  1. Если API ориентирован на пользователя, он должен предоставлять интерфейс jsonp, и это то, что я буду использовать.Ориентированный на пользователя означает, что вы не можете воспринимать любую причину вызова API, выполнить некоторые вычисления с ответом, можете вызвать одну из ваших служб ajax, а затем объединить ответ и показать пользователю.

  2. Если мой вариант использования включает в себя вызов API и последующую обработку ответа, например, вызов дополнительных служб из моего приложения, объединение данных и последующее их отображение пользователю, я бы предпочел не делать этого в браузере.Я бы вместо этого использовал RestTemplate и выполнял бэкэнд-API-вызовы в сервис.В этом случае нет никаких междоменных ограничений.

Единственный случай, когда использование прокси-сервера сервера для обхода jsonp - это когда вы создаете продукт, который позволяет людям создавать собственные плагины, плагины, которыеразмещены на вашей странице, но необходимо совершать Ajax-вызовы на серверах разработчиков приложений.Это очень сложный случай!(В качестве примера рассмотрим, как Apigee создает Public Facing REST API для существующих URL-адресов или как Zendesk позволяет разрабатывать приложения)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...