刚刚发布的FireFox 3.5 给我们带来很多新的改进,其中一个值得开发者注意的新特性就是使用 XMLHttpRequest 对象进行跨域名的 HTTP 请求,用 Mozilla 的术语来说就是 cross-origin 请求。 我们都知道因为安全的原因,多数浏览器都限制了Ajax请求以及脚本加载的时候只能是跟当前页面的源是一致的,例如 我们访问呢 http://www.oschina.net 页面,那么我们做的 XMLHttpRequest 请求只能是针对 www.oschina.net ,而不能是 wap.oschina.net 或者 http://www.oschina.net:8080/ ,后者因为端口不同。 这是个很棘手的问题,特别是在一些负载较重的基于 JavaScript 的Web应用,例如 Cometd 应用,这些应用经常需要跟多个域名打交道来,一是可以将请求分摊到不同的服务器,而是访问不同的业务。 针对这一限制,有人会采用一些变通的做法,例如使用 Bayeux 通讯框架,该框架是基于 JSONP 协议的,通过在 DOM 中注入 script 元素来连接到不同的域名上。 当然,这种方式是可行的,但可靠性比起标准的相同域名的 Ajax 调用要差得多。 幸运的是 W3C 新出的一个规范 Cross-Origin Resource Sharing Specification 中对该限制进行了改进。而 FireFox 3.5 已经实现了该规范,因为其他浏览器目前还没动静,所以你还是需要慎重考虑一下是否采取该技术。 而对于服务器端来说,新发布的 Jetty 7.0.0 RC2 给我们带来一个全新的 Filter 类用来实现该 cross-origin 规范。关于这个 Filter 更详细的信息请看这里。 责任编辑:米尊 |