从 GWT 客户端访问另一台服务器中的文件

Posted

技术标签:

【中文标题】从 GWT 客户端访问另一台服务器中的文件【英文标题】:Accessing a file in another server from GWT Client side 【发布时间】:2011-03-30 04:16:59 【问题描述】:

我有一个文件 sample.xml 位于一台 Web 服务器上。我想从运行在另一台服务器上的 GWT 应用程序访问此文件。我不想对服务 GWT 应用程序的同一服务器进行 RPC 调用并访问服务器端所需的文件(如代理)。我想直接从客户端访问该文件,因为我的应用程序将作为静态文件托管在 Web 服务器中。

有没有办法做到这一点?

【问题讨论】:

您对该服务器有控制权吗?如果你这样做了,JSONP 就可以了。否则...我看不到任何优雅的方式 - SOP 的存在是有原因的 ;) 【参考方案1】:

当然 - 您必须从浏览器发出 XHR (XmlHTTPRequest),然后解析数据。 在 GWT 中,您可以使用 RequestBuilder 类(请参阅 here)。

请注意,某些客户端限制可能适用(例如单一来源策略等)

您发出请求(在您的情况下为 GET 或 POST - GET)并传递一个回调实例。 实例的onResponseReceived 方法接收一个Response 对象,该对象通过调用其getText 方法返回接收到的内容。

【讨论】:

“RequestBuilder”提供了帮助。但我的要求是从另一台服务器访问文件,而不是提供应用程序代码的服务器。我收到 com.google.gwt.http.client.RequestPermissionException 说明相同的组织策略限制。 如果您可以访问文件服务器,则可以通过发送Access-Control-Allow-Origin HTTP 标头来缓解 SOP 限制 - 但应谨慎使用,因为它会带来一些风险。【参考方案2】:

您正在尝试让您的网站 (a.com/index.html) 引用 b.com/sample.xml。我看到了一些选项。

如果您有权访问b.com 的服务器:

sample.xml 编辑成sample.js 以在带有回调的JSON 中包含相同的信息,并使用script 标签引用它 使用跨站点加载器编译您的网站(参见Controlling Compiler Output),将您的index.html 放在b.com/index.html,将所有其余文件放在a.com。然后您的所有 RPC 调用都可以转到 b.com,但这意味着用户必须导航到 b.com 而不是 a.com

如果您无权访问b.com 的服务器: - 只需提供一个链接供人们下载sample.xml - 在具有某种脚本支持(php、Python、Ruby、Java 等)的服务器上托管 a.com,并为 b.com/sample.xml 设置代理

【讨论】:

以上是关于从 GWT 客户端访问另一台服务器中的文件的主要内容,如果未能解决你的问题,请参考以下文章

常用TCP协议

局域网中访问oracle。

如何从托管在另一台服务器上的 Web 应用程序调用客户端计算机托管的 Wcf 服务?

GWT 中的基本文件上传

在 GWT 中从服务器向客户端发送文件

GWT:从客户端下载文件,无需服务器干预