从 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 客户端访问另一台服务器中的文件的主要内容,如果未能解决你的问题,请参考以下文章