跨域资源共享
通过xhr实现ajax通信的主要限制来源于跨域安全策略。默认情况下xhr对象只能访问与包含他的页面位于同一域中的资源。
同域名,同端口,同协议
CORS - Cross-Origin Resource Sharing
基本思想
使用自定义的http头让浏览器与服务器进行沟通,从而决定请求或响应应该是成功还是失败。
在发送http请求时,附加一个额外的头部
1 | Origin: http:www.kfdykme.xyz |
如果服务器认为请求可以接受,就在Access-Control-Allow-Origin头部中回发相同的源信息
如果是公共资源,可以回发*
1 | Access-Control-Allow-Origin: http:www.kfdykme.xyz |
如何没有该头信息或者不匹配,则浏览器驳回请求
对CORS的实现
通过XMLHTTPRequest对象实现对CORS的原生支持。
跨域xhr的限制
- 不能使用setRequestHeader设置自定义头部
- 不能发送和接受cookie
- 调用getAllResponseHeaders()方法返回空字符串
Prefighted Requests
带凭据的请求
Access-Control-Allow-Credentials: true
其他跨域技术
图像ping
1 | var img = new Image(); |
JSONP
动态script标、
Comet
长轮训
短轮训8
服务器发送事件
Web Socket
总结自 JavaScript高级程序设计