技术开发 频道

IE 8 Beta 1 AJAX程序员指南

   但是在Internet Explorer 8中,借助于新的XDomainRequest对象,Web页面可以轻松地实现从浏览器中发出一个跨域数据请求而不是一个服务器-到-服务器的请求。图2展示了从Internet Explorer 8浏览器请求其他服务器内容的基本原理。




图2—在Internet Explorer 8中,Web页面发出的是跨域的而不是服务器-到-服务器的数据请求

   要实现跨域请求,要求事先在Web页面和Web服务器之间建立一个相互同意的协议。你通过可以在你的Web页面中创建一个XDomainRequest对象并且打开一个到特定域的连接来初始化一个跨域请求。浏览器将从域中的服务器上请求数据—通过发送一个XDomainRequest请求(仅仅是一个头部)。如果服务器使用一个XDomainRequestAllowed头部并且使其值为“1”进行响应的话,它将仅仅完成连接的建立。例如,一个服务器的ASP页面可能包括下列响应头部:

Response.AppendHeader("XDomainRequestAllowed","1");


【注意】为了实现用户数据的保护,跨域请求都是匿名进行的。这意味着,服务器无法轻易地确定是谁请求的数据。这样以来,有助于某些开发人员实现仅想使用非敏感性的或非个性认证的跨域数据进行请求和响应的情形。

API文档

方法

   一旦创建一个xdomainrequest对象,那么,你可以使用open方法打开一个到域服务器的连接。这个方法支持GET和POST HTTP方法并且以要连接到的URL作为一个参数。一旦你打开了一个连接,那么,如果需要的话,你就可以使用send方法把一个数据字符串发送到服务器进行处理。例如:
 

//1 创建XDR对象
xdr = new XDomainRequest();
//2 使用POST方法打开到服务器的连接
Xdr.open(“POST”,“http://www.contoso.com/xdr.txt”)
//3 把字符串数据发送到服务器
Xdr.send(“data to be processed”)

   另外,XDR还有一个abort方法,可以用于取消一个活动请求。此方法不使用任何参数。在取消活动请求时,数据是不可用的。

属性

•responseText—在服务端响应以后,你可以通过只读属性responseText检索数据串。
•timeout—你可以使用timeout属性设置或检索浏览器应该等待一个服务器响应所需要的毫秒数。如果没有显式地设置这个属性的话,Internet Explorer默认并不使用timeout属性。如果请求超时,那么数据是不可用的。
•contentType—如果你把消息寄送(post)到服务器,那么,使用contentType属性定义将发送到服务器端的contentType串。如果你正在使用一个GET式的HTTP请求,那么这个属性将允许你读取contentType串。

事件

XDR共提供了下列事件:

•onerror—当存在错误并且请求不能完成时引发此事件。例如,网络不可用时将引发此事件。
•ontimeout—当请求达到由上面的timeOut属性定义的时限时引发此事件。如果请求超时,那么数据是不可用的。
•onprogress—当服务器响应请求而数据正流回浏览器时引发此事件。
•onload—当完成跨域请求并且数据可用时引发此事件。

【注意】跨域请求仅可以从一个Web页面发送到(和接收自)图3中所示的Internet Explorer带的URL。我们不鼓励企业内部网站对外使其XDR数据可用,因此这可以有效地防止企业内网数据泄漏到恶意的外部Internet网站。



                        图3—Internet Explorer带的URL服务器端

   浏览器从域的服务器中请求数据—通过发送一个XDomainRequest(一个头部)。如果服务器使用一个XDomainRequestAllowed头部并且使其值为“1”进行响应的话,它将仅仅完成连接的建立。
例如,一个服务器的ASP页面包括下列响应头部:
 

Response.AppendHeader("XDomainRequestAllowed","1");

   这种情况在IIS中可以使用一个ASP.NET页面来实现。下面代码可以嵌入到你的ASP页面中返回响应头部:

<<% Response.AddHeader "XDomainRequestAllowed","1" %>Data


 

0
相关文章