实现HTTP代理以克服跨站点AJAX请求限制(?)

nic*_*dos 7 java ajax proxy spring spring-mvc

我有一个Spring-MVC webapp(3.0.5-RELEASE),它需要从另一个子域(通过AJAX从客户端/浏览器)访问另一个webapp的JSON webservices.

我过去通过以下方式解决了这个问题:

  1. 编写一个代理请求的简单控制器,使用Apache Commons HttpClient处理请求.因此,克服了大多数浏览器的跨站点/跨源请求安全限制

  2. 在服务器端实现JSONP服务(在调用我们自己的JSON服务时) - 并非总是可行

在JSONP不可能的情况下,是否有更好的方法(1.)?

和/或

有没有一个库可以为我处理这个?所以我不必HttpClient自己编写所有代码 - 它不是很多代码,但我想知道我是否(非常)重新发明了这个轮子.

Aks*_*hay 0

我经常不得不使用第三方 Web 服务 (API),正如您提到的,JSONP 并不总是一种选择。这就是我的设计方式:

  1. 如果 API 以用户为中心,它必须提供一个 jsonp 接口,这就是我将使用的。以用户为中心意味着您无法感知任何调用 API 的原因,对响应进行一些计算,可能会调用您的 ajax 服务之一,然后组合响应并向用户显示。

  2. 如果我的用例包括调用 API,然后对响应进行操作,例如从我的应用程序调用其他服务、组合数据然后将其显示给用户,我宁愿不在浏览器中执行此操作。我会使用 RestTemplate 并对服务进行后端 api 调用。在这种情况下,没有跨域限制。

使用服务器代理绕过 jsonp 的唯一情况是当您创建一个允许人们构建自定义插件的产品时,这些插件托管在您的页面上,但需要对应用程序开发人员服务器进行 Ajax 调用。这是一个非常复杂的案件!(例如,看看 Apigee 如何围绕现有网址创建面向公众的 REST API,或者 Zendesk 如何允许您开发应用程序)

希望这可以帮助。