跨域资源共享

跨域资源共享

通过xhr实现ajax通信的主要限制来源于跨域安全策略。默认情况下xhr对象只能访问与包含他的页面位于同一域中的资源。

同域名,同端口,同协议

CORS - Cross-Origin Resource Sharing

基本思想

使用自定义的http头让浏览器与服务器进行沟通,从而决定请求或响应应该是成功还是失败。

在发送http请求时,附加一个额外的头部

1
Origin: http:www.kfdykme.xyz

如果服务器认为请求可以接受,就在Access-Control-Allow-Origin头部中回发相同的源信息

如果是公共资源,可以回发*

1
2
3
Access-Control-Allow-Origin: http:www.kfdykme.xyz

Access-Control-Allow-Origin: *

如何没有该头信息或者不匹配,则浏览器驳回请求

对CORS的实现

通过XMLHTTPRequest对象实现对CORS的原生支持。

跨域xhr的限制

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

Prefighted Requests

带凭据的请求

Access-Control-Allow-Credentials: true

其他跨域技术

图像ping

1
2
3
4
5
6
7
var img = new Image();

img.onload = img.onerror = function () {
alert('done')
}

img.src = ''

JSONP

动态script标、

Comet

长轮训

短轮训8

服务器发送事件

Web Socket

总结自 JavaScript高级程序设计

  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 Kfdykme
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信