免责声明:我是easyXDM的主要作者。
要直接回答这个问题其实并不容易,要考虑的事情很多。
首先,让我们在问题范围之外比较 easyXDM 和 JSONP。
JSONP 允许 客户端程序(使用 BOM/DOM 的 JavaScript)与 服务器端程序(使用 db、会话存储等的.net、php 等)进行交互),并且只有客户端可以发起消息传递(请求/响应、轮询或推送,尽管对于推送,您可以轻松设置 IMG.src、执行 XHR 或 FORM 帖子,因为您不需要响应)。
客户端可以发送到服务器的数据量是有限的,并且该数据还必须被格式化以适合作为查询字符串参数,并且服务器必须设置为响应所述数据。对于每条消息,都会以由此产生的成本运行一次网络旅行。
easyXDM 使用基于字符串的传输堆栈促进任意两个客户端程序之间的消息传递。不需要涉及任何服务器端程序,也没有网络流量。双方都是平等的,都可以发起消息传递,并且都可以在客户端上保持状态(因此使用术语 programs 而不是普通的 Javascript)。
消息的大小没有限制,只要数据可以序列化为字符串,传输就可以处理(easyXDM允许你设置自定义序列化器,或者使用JSON)。
这两者的主要区别在于一个是在客户端和服务器之间,只有客户端可以发起消息传递,另一个是在两个平等的客户端程序之间,其中一个可以使用XHR和其他方式进行通信,或将数据中继到服务器。
关于安全性; JSONP 要求客户端绝对信任服务器,毕竟它允许它在其程序中运行任意代码。除此之外,几乎没有问题,但这是一个严重的问题。
easyXDM 只传输信息(字符串),不传输代码,由接收方检查信息并对其采取行动。所以绝对没有执行任意代码的风险。虽然上述情况属实,但 easyXDM 建立通道所依赖的一些组件易受 XSS 攻击(特制的 url 会导致客户端执行任意代码),但这些组件已被关闭。目前尚无此类漏洞,所有新代码都经过彻底审查。
我自己将 easyXDM 用于一些要求很高的项目,LinkedIn、Twitter 和 Disqus 等网站以及诺基亚和其他公司运行的应用程序都在 easyXDM 提供的消息传递框架之上构建了他们的应用程序,所以有很多人翻阅过代码并检查过,并通过使用它来保证其安全性。
最后,它真的是关于用例。例如,JSONP 不能用于跨域调整窗口大小,因为这需要 client/client 通信。但是通过让其中一方使用 XHR,easyXDM 可以同时用于客户端/客户端和客户端/服务器。
在您的情况下,如果您只需要在不安全的域上提供一小部分信息,则这些都不是真正需要的。
- 浏览安全域,在不安全域上设置 cookie
- 浏览安全域,让它重定向到其请求中的不安全传递信息
- 浏览安全域,在重定向到不安全域之前将数据存储在 window.name 中。
如果信息不能被欺骗至关重要,那么您需要对所有这些数据进行签名,以便确认其真实性,但如果您只需要一个名称,那么这应该是不必要的。
一个简单的方法来检查真实性是
- 在不安全域上,生成随机密钥并存储,并重定向到传递密钥的不安全域。
- 在安全域上将机密与信息一起传回(使用上述任一方法)
- 在客户端上验证信息是否包含机密。
由于只有双方可能拥有秘密,因此信息得到验证。
总结,确实没有确定的答案,这完全取决于情况。所以选择,但要明智地选择:)