【问题标题】:GWT client communicates with public serverGWT 客户端与公共服务器通信
【发布时间】:2013-07-01 15:32:44
【问题描述】:

我正在创建这个没有服务器端的客户端 webapp。例如,我希望这个客户端简单地向公共网站发出 HTTP 请求,例如 http://www.google.com。到目前为止,我已经使用 RequestBuilder 构建了我的 HTTP 请求,但是当我在开发模式下运行应用程序时,我的请求的响应代码始终为 0。在我构建它并对 hmtl 文件发出请求后,它给出了相同的结果。在我看来,客户端没有与公共互联网通信,而只是与本地服务器(为空)通信。

String url = "http://www.google.com";
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));

无论如何我可以完成这项工作吗?谢谢!

【问题讨论】:

    标签: gwt web-applications httprequest


    【解决方案1】:

    除非您在服务器中启用CORS,否则您无法向下载页面的其他服务器发出 XHR 请求。

    google.com 尚未启用 CORS,因此您无法使用 XHR 请求他们的页面。

    如果您拥有要请求启用 CORS 的域,here 您有一个用于 java 后端的过滤器示例。

    如果您只是想在您的用户界面中显示 3party 网站,您可以将其作为 iframe 插入,但请注意您无法读取 iframe 内容,因为它位于不同的域中。

    请注意,CORS 几乎适用于浏览器,但对于 IE/8-9,您必须使用 XDomainRequest

    【讨论】:

      【解决方案2】:

      您遇到了Same Origin Policy 限制。基本上,不可能直接向不同的域发出请求。如果您只想按原样显示该网站,则可以使用 iframe 来完成;如果您想提出更具体的请求,则需要使用类似JSONP 的方式来执行此操作,但这需要服务器实际支持它。

      【讨论】:

      • @Marconious 这句话不是真的it's impossible to make requests to a different domain directly。实际上,现在大多数浏览器都支持 CORS 机制,因此如果该域发回某些标头,您可以向任何域发送 ajax 请求。 IE8-IE9 而不是 CORS 有 XDomainRequest。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2016-10-04
      相关资源
      最近更新 更多