我无法从文档中看到它应该如何工作。使用Firebug进行调试也没有帮助。也许我得坐上几个小时才能更好地理解它。
基本问题是,我想检查各种地理服务的可用性(WFS
, WMS
)。由于XSS浏览器限制的问题,XmlHttpRequest
无法工作。
我猜Socket
接口是正确的使用,因为我不能实现一些CORS
场景,因为我对外部服务没有影响。
使用以下代码可以正常工作并返回一些请求的数据(Firefox会弹出下载的XML响应):
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
}
});
然而,我没有找到的方法(尝试使用onReady
和onMessage
回调)以某种方式获得一些HTTP status
对象,我可以处理以确定哪种响应,例如。200
, 404
,我得到了。
也许这是完全错误的解决方法?
遗憾的是,即使我的赏金也没有帮助我得到答案,所以我自己快速浏览了一下,收集了更多关于这个问题的信息…第一次…
XSS一般问题
看看XSS和一些相关的问题/链接,讨论的问题比解决方案更多(这是可以的)。
查看相关的Firefox文档关于JavaScript同源策略,很明显我们的全球口号安全高于自由1也适用于这个领域。(就我个人而言,我不喜欢这种解决问题的方法,我希望看到另一种方法来解决这些问题,就像这个答案末尾所描述的那样。)
1:出自本杰明·富兰克林(美国开国元勋)之口:为了安全而牺牲自由的人不配得到这两者
CORS解决方案(=>外部服务器依赖性)
唯一支持的标准/健壮的方法似乎是使用CORS (跨域资源共享)功能。基本上,这意味着外部服务器必须至少交付一些CORS兼容的信息(HTTP头Access-Control-Allow-Origin: *
),以允许其他人(=客户端浏览器)请求数据/内容/....也意味着,如果没有对外部服务器的控制,将没有通用的健壮的客户端/浏览器方式来完成此操作:-(.
服务器/客户端应用程序的健壮解决方案(如果没有外部服务器控制)
因此,如果我们的外部服务器不支持CORS或者它没有被配置为我们的请求者原点(协议/域/端口组合)可用,那么似乎最好在我们自己的应用程序服务器端进行这种访问,我们没有这些类型的限制,但当然还有其他含义。
客户端解决方案我希望看到
首先介绍一下我作为一个标准用户浏览网页时所经历的客户端世界…
我个人不喜欢在浏览网页时被跟踪,也不喜欢因硬件或网络资源不佳而减慢速度,也不希望在浏览网页时暴露于简单避免的数据安全问题。这就是为什么我使用Firefox的各种有用的插件,如RequestPolicy, AdBlock Plus, Ghostery, Cookie Monster, Flashblock ... .这已经显示出复杂性,一般用户通常无法处理。但是,特别是查看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等可能存在。