0

我无法从文档中看到它应该如何工作。使用 Firebug 进行调试也无济于事。也许我必须坐几个小时才能更好地理解它。

基本问题是,我想检查各种地理服务 ( WFS, WMS)的可用性。由于XSS浏览器限制的问题XmlHttpRequest没有起作用。

我想这个Socket接口是正确的,因为我无法实现某些CORS场景,因为我对外部服务没有影响。

使用以下代码可以正常工作并返回一些请求的数据(下载的 XML 响应的 Firefox 弹出窗口):

var socket = new easyXDM.Socket({
    remote: "http://path.to/provider/", // the path to the provider
    onReady:function(success) {
        alert(success);  // will not be called
    }
    onMessage:function(message, origin) {
        alert(message, origin);  // will not be called
    }
});

但是,我没有找到一种方法(尝试使用onReadyonMessage回调)以某种方式获取一些我可以处理的 HTTPstatus对象,以确定我得到了哪种响应,例如200,404

也许这是解决这个问题的完全错误的方法?

4

1 回答 1

0

可悲的是,即使我的赏金也无助于获得答案,所以我快速环顾四周,自己收集有关该问题的更多信息......首先......

XSS的一般问题

查看XSS和一些相关问题/链接讨论的问题多于解决方案(没关系)。

查看有关JavaScript 同源策略的相关Firefox 文档,很明显我们的全球口号Security over Freedom 1也适用于该领域。(就我个人而言,我不喜欢这种解决问题的方式,并且希望看到另一种解决这些问题的方法,如本答案末尾所述。)

1 :本杰明·富兰克林斯(美国的创始人)很好地归因于声明:为安全而牺牲自由的人都不值得。

CORS 解决方案(=> 外部服务器依赖项)

唯一受支持的标准/稳健方式似乎是使用CORS跨域资源共享)功能。基本上这意味着外部服务器必须至少提供一些符合CORS的信息(HTTP HeaderAccess-Control-Allow-Origin: *)以允许其他人(=客户端浏览器)请求数据/内容/...。这也意味着如果一个人无法控制外部服务器根本没有通用的健壮客户端/浏览器方式来执行此操作:-(。

服务器/客户端应用程序的强大解决方案(如果没有外部服务器控制)

因此,如果我们的外部服务器不支持CORS或者它未配置为可供我们的请求者来源使用(协议/域/端口组合),似乎最好在我们自己的应用程序服务器端进行这种访问,而我们没有这些限制,但当然还有其他含义。

我希望看到的客户端解决方案

首先进行一些介绍,以了解我作为标准用户浏览网页时所经历的客户端世界......

我个人不喜欢在浏览网页时被跟踪,也不喜欢因硬件或网络资源不佳而减慢速度,也不希望在浏览网页时遇到简单避免的数据安全问题。这就是为什么我使用 Firefox 和各种有用的插件,如RequestPolicyAdBlock PlusGhosteryCookie MonsterFlashblock ...。这已经表明了复杂性,普通用户通常无法/不会处理。但特别是查看RequestPolicy,它显示了如何在客户端处理对外部资源的访问。

因此,如果例如 Firefox(没有这些插件)将支持某些功能来向用户显示类似于RequestPolicy的对话框,这可能会声明如下内容,我们可以放宽单一来源策略

  [x] 'http://srcdomain.com' (this site)
  [ ] all sites  (select to block/allow for all sites)

would like to request some data from 

  [x] 'http://dstdomain.com'
  [x] 'http://dst2domain.com' 

in a generally considered UNSECURE way.

You can selected one of the following options about how to proceed with
access to the selected sites from the selected sites:

  [x] block always (generally recommended)
  [ ] block only for this session
  [ ] allow always (but not to subreferences)  [non-recursively]
  [ ] allow only for this session (but not to subreferences)  [non-recursively]
  [ ] allow always (and all subreferences)  [recursively]
  [ ] allow only for this session (and all subreferences)  [recursively]

当然,这应该对普通用户尽可能清楚,我在这里当然没有这样做,并且也可以像其他现有技术(Cookie 处理、JavaScript 处理......)一样在设置中默认处理.

这样我就可以毫不费力地解决我遇到的问题,因为我可以很好地处理在我的情况下所需的用户设置量。

关于easyXdm的回答

我猜因为他们也推荐CORS并且取决于浏览器,这是唯一可靠的方法,尽管可能仍然存在一些变通方法,具体取决于浏览器/版本/插件,例如 Flash 等可能存在。

于 2014-04-02T10:21:36.110 回答