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

问题描述:

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

有没有办法做到这一点?

+1

你有在该服务器的一些控制?如果你这样做,JSONP会工作。否则...我没有看到任何优雅的方式 - SOP是有原因的;) – 2010-08-15 22:06:50

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

请注意,某些客户端有所限制(例如单来源策略等)

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

+0

'RequestBuilder'帮助。但我的要求是从另一台服务器访问文件,而不是从应用程序代码提供的文件。我得到com.google.gwt.http.client.RequestPermissionException,说明相同的orgin策略限制。 – 2010-08-15 20:39:36

+0

如果您有权访问文件服务器,可以通过发送“Access-Control-Allow-Origin”HTTP头来缓解SOP限制 - 但应谨慎使用它,因为它确实会带来一些风险。 – adamk 2010-08-16 08:23:34

您正试图让您的网站(a.com/index.html)参考b.com/sample.xml。我看到几个选项。

如果你有机会获得b.com的服务器:

  • 编辑sample.xmlsample.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