【问题标题】:getXDM or JSONP which one to use to circumvent same origin policygetXDM 或 JSONP 使用哪一个来规避同源策略
【发布时间】:2011-06-21 22:17:37
【问题描述】:

我正在创建一个 JavaScript 小部件,它从我托管的 WCF 服务中获取大约 4-6KB 的数据,并使用画布标签 (HTML5) 来绘制一些图表。我希望任何人都能够通过复制粘贴我共享的一些 html 和 JavaScript 来将此小部件嵌入到他们的网站中。

现在的问题:同源策略,它不允许从小部件的主机域到我域上的 WCF 服务的任何 XHR 请求,这意味着使用小部件的任何人都无法从我的 WCF 服务获取数据(每个请求将获得大约 4-6kb 的数据作为响应)。

我翻遍了本站之前的discussions,找到了以下可能的解决方案:

  1. JSONP(可以与我的 WCF 服务一起使用)
  2. 隐藏的 iframe(不可能,因为我无法控制这两个域)
  3. window.postMessage(不确定 JavaScript 库是否可以使其在旧浏览器(即 IE6)中运行)
  4. 跨域资源共享 (CORS)(不可能,因为我希望能够运行旧浏览器,即 IE6)
  5. 反向代理方法(不可能,因为我无法控制用户网站的服务器)
  6. easyXDM(可能是一个可能的解决方案,但需要探索如何将它与我的 WCF 服务一起使用)

首先,我想与你们确认,我对可能的不同方法所做的简要分析是正确的,我不会错过任何人正在使用的任何好的解决方案,如果我的分析是正确的,我想讨论这些方法的优缺点。

其次,我知道 Facebook、Twitter、Google 都分享了他们的应用程序(正是我想要分享的方式)并且已经克服了这个问题以便这样做,谁能指出我可以找到更多的方向关于他们是如何解决这个问题的。

【问题讨论】:

  • easyXDM 可以轻松适应这种情况 - 只需看一下 xhr/CORS 示例。但是对于您所描述的,由于成本较低,我可能会选择 JSONP。但是,如果您打算扩展小部件,那么 easyXDM 绝对是要走的路 - 您提到的网站遵循 easyXDM 促进的相同模式(Twitter 甚至使用 easyXDM)。
  • 在我自己调查过之后,你已经把所有值得一看的东西都列在了清单上。正如 leeeb 的回答所说,不在概率 JSONP 之间。那个或easyXDM。

标签: javascript ajax widget same-origin-policy


【解决方案1】:

这是你需要根据来判断的东西

  • 您的小部件可以接受多大,包括库。
  • 您需要多久轮询一次服务,或者它是否是一次性事件。
  • 完整的浏览器兼容性对您来说有多重要。

对于您描述的特定用例,我建议使用 JSONP。它将保持小部件非常小,是一个很好的跨浏览器解决方案,并且可以处理适度的数据需求。

Google 等使用“彗星”类型的解决方案,其中像流一样的套接字在客户端和服务器之间持久存在。这不应该用于小部件,因为它会占用浏览器资源。

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 2013-06-27
    • 2014-05-29
    • 2011-06-20
    • 2013-11-04
    • 1970-01-01
    • 2014-10-29
    • 2011-10-03
    • 2016-11-13
    相关资源
    最近更新 更多