GWT:如何使用 JSON 发送 POST 跨域请求
Posted
技术标签:
【中文标题】GWT:如何使用 JSON 发送 POST 跨域请求【英文标题】:GWT: How to send POST cross domain requests with JSON 【发布时间】:2011-04-05 20:00:08 【问题描述】:正如其 Javadocs 所建议的,JsonpRequestBuilder 只能发送 GET 请求。我需要使用相同的方法发送 POST 请求(对于使用 JSON 的跨域请求)。 有人知道任何可行的解决方案吗?我在网上找不到任何起点。
提前致谢
【问题讨论】:
【参考方案1】:我也遇到了这个问题,我必须实施一些古怪的方案才能让它发挥作用。幸运的是,我同时控制了服务器和客户端。
POST 调用定义了一个名为 'src' 的 url 参数,其中包含一些随机字符串。当我 POST 到服务器时,数据会发送到服务器,但我无法获得响应。
在幕后发生的事情是服务器将带有“src”键的 POST 响应缓存在弱缓存中。
然后我在 POST 使用相同的 'src' 键完成后立即执行 JSONP get 调用,并获取结果。
它不漂亮,但它有效。
【讨论】:
【参考方案2】:Google APIs Library for GWT 解决了这个问题(发送跨域 GWT-RPC 调用),方法是使用 Shindig 项目的 gadgets.rpc 功能向指向您尝试与之通信的服务器上的页面。 iframe
是发出请求的那个,当它收到响应时,它会发回另一个跨帧消息。
这已包含在GadgetsRequestBuilder
中。
扩展此功能以发出常规 XHR 请求(使用 POST 方法)而不是 GWT-RPC 请求应该相当简单。
【讨论】:
感谢您的建议,但由于完成此任务的时间有限,我决定暂时继续使用 GET。【参考方案3】:您不能使用 JSONP 进行 POST - 它所做的只是插入一个 <script src="...">
标记,然后浏览器会触发一个 GET 请求。
也许您正在寻找的是CORS,但它仅受 FF 3.5、IE 8 和 Safari 4 及更高版本支持。并且服务器也必须支持它。
否则,您将不得不从您的服务器代理到另一个域。
【讨论】:
谢谢,您的建议看起来很有希望。但由于完成这项任务的时间有限,我决定暂时继续使用 GET。 您忘记提及 Chrome 3 或更新版本。如果有帮助,我已经更新了 CORS Wikipedia 文章,其中包含我几天前收集的有关浏览器支持的更详细信息。以上是关于GWT:如何使用 JSON 发送 POST 跨域请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 GWT RPC 序列化在 POST 中将对象从客户端发送到服务器
我正在使用 angularjs 和 django-cors-headers 然后给出“这对于需要预检的跨域请求是不允许的。”
GWT,修改使用 InputStreamReader 和 java.net.URL 类通过 Post 发送 HashMap 或其他对象的代码?