【问题标题】:How can I send cross site PUT requests through GWT?如何通过 GWT 发送跨站点 PUT 请求?
【发布时间】:2013-03-26 00:10:58
【问题描述】:

我正在使用 GAE/GWT 创建一个 Web 应用程序。前端 GUI 是一个 Web 客户端,服务器是一个 RESTFUL 服务器,两者都在 不同 域的 GAE 中运行。

我正在使用带填充的 json 与服务器通信,但发现我无法发送 PUT/POST/DELETE 请求。

我的应用程序将主要用于查询数据(查询:85% 的情况,修改数据:15%)。所有请求都将被验证。

我正在考虑以下选项。

1) 查询使用JsonpRequestBuilder,修改在Web客户端服务器端创建一个代理,并通过该代理访问REST服务。使用 GWT RPC 与此代理通信。

2) 在我的 REST 服务(包括那些修改数据的服务)中将每个请求作为 GET 请求,并直接从 Web 客户端使用 jsonp。

我更喜欢选项 1),但选项 2) 似乎要做的工作更少。

应该 1) 是我的首选吗?

考虑到我的所有请求都将通过身份验证,2) 是否有任何问题。 ?

有没有其他简单的方法来解决这个问题?

问候,

沙迪亚

【问题讨论】:

  • @Parvathy 仅仅因为它不在 URL 中并不能使其安全 - 任何观看流量的东西都可以像 url 一样轻松读取正文。

标签: google-app-engine rest gwt jsonp


【解决方案1】:

很抱歉,让您的客户端在不同的域上运行有什么好处?据我了解,您的客户的服务器不会做任何事情......

如果您不是 REST 后端的“所有者”,也许这个后端应该为第三方应用程序开发一个授权系统,例如 oauth2

然后您的应用程序可以通过安全连接与后​​端通信。您可以在后端使用 scribe 来执行此操作。

【讨论】:

  • 谢谢罗南。实际上我拥有服务器和客户端。也许我应该在同一个域中运行它...
【解决方案2】:

最简单的解决方案是使用CORS,它允许您向两个不同的来源发送请求。但是它没有那么广泛传播(检查caniuse),所以如果你必须支持IE8-9,它对你来说是不够的。

在您的情况下,我会尝试实施双重解决方案(例如 CORS + 服务器代理)。如果浏览器支持 CORS - 将请求直接发送到目标服务器,如果不支持 - 通过代理发送请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多