JavaScript跨源资源共享

时间:2023-03-09 04:39:42
JavaScript跨源资源共享

CORS(跨 源资源共享)基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应式应该成功还是失败

IE对CORS的实现

IE8引入了XDR类型,与XHR类似,但可以实现安全可靠的跨域通信。

两者不同之处:

  • cookie不会随请求发送,也不会响应返回
  • 只能设置请求头部信息中的Content-Type字段
  • 不能访问响应头部信息
  • 只支持GET和POST请求

使用方法时与XHR对象相似,创建xDomainRequest 实例,调用open(),再send().但open()方法只接受两个参数,请求的类型和URL。

XDR请求都是异步执行的,请求返回之后触发load事件,响应数据保存在responseText属性中。如果失败(Access-Control-Allow-Origin头部)触发error事件。

如:

var xdr = new XDomainRequest();

xdr.onload = function(){

alert(xdr.responseText);

}

xdr.onerror = function(){

alert("An Error Occured");

}

xdr.open("get","http://www.baidu.com/page/");

xdr.sent(null);

当用post传送资源时,通过contentType属性影响头部信息的唯一方式

其他浏览器

使用标准的XHR对象并在open()方法中传入绝对URL即可。还可支持同步请求。跨域XHR对象有一定的限制(安全限制)

  • 不能使用setRequestHeader()设置自定义头部
  • 不能发送和接收cookie
  • 调用getAllResponseHeaders()方法总会返回空字符串

由于无论同源请求还是跨源请求都使用相同的接口,因此对于本地资源,最好使用相对URL,在访问远程资源时再使用绝对URL.

XMLHttpRequest对象和IE中的XDomainRequest对象的共同的属性/方法:

  • abort():用于停止正在进行的请求。
  • onerror():用于替代onreadystatechange检测错误。
  • onload():用于onreadystatechange检测成功。
  • responseText:用于取得响应内容。
  • send():用于发送请求。

以上成员都包含在createCORSRequest()函数返回的对象中,在所有浏览器中都正常使用。

其他跨域技术

1.图片ping

2.JSONP

3.comet

4.sse(服务器发送事件)

5.Web Socket