参考:
维基百科 - Root domain
https://en.wikipedia.org/wiki...
浏览器同源政策及其规避方法 - 阮一峰
http://www.ruanyifeng.com/blo...
window.name 跨域实现原理及实例
http://blog.csdn.net/qq_34099...
html5 postMessage 官方API
https://developer.mozilla.org...
JSONP(直接跳到JSONP那段)
http://kb.cnblogs.com/page/13...
跨域资源共享 CORS 详解 - 阮一峰
http://www.ruanyifeng.com/blo...
跨域资源共享(CORS) - 阿里云技术文档
https://www.alibabacloud.com/...html
域 domian : . 根域、 .org 顶级域(一级域)、 .baidu.com 二级域
域名 domain name : baidu .com 顶级域名(一级域名)、www .baidu .com 二级域名
同源条件:协议相同、域名相同、端口相同,不知足即为 跨域
同源目的:浏览器 同源策略,保证用户信息的安全,防止恶意的网站窃取数据
不少文章中介绍,跨域会对如下3种行为进行限制:前端
1)cookie、localStorage、indexedDB
2)dom
3)ajax 请求
我理解按以下分类更为合理:
1)cookie
2)iframe/window.open ( localStorage、indexedDB、dom )
3)ajax 请求
浏览器容许经过设置 document.domain 来实现跨子域
若有 a.example.com 和 b.example.com 2个二级域名,设置 document.domain=example.com 或 Set-Cookie:key=value;domain=example.com;path=/ 可实现2个二级域之间的跨域
可解决 cookie、iframe、window.open、ajax 的跨域问题
可解决 iframe 的跨域问题
不推荐,如 angular.ui.router 前端路由组件会使用到 URL #hash 字段。
可解决 iframe 的跨域问题
window.name 的变化如何监听是一个问题,大约能够存储2M的内容
可解决 iframe & window.open 的跨域问题
语法:otherWindow.postMessage(message, targetOrigin, [transfer]);
官方API参考
参考:http://kb.cnblogs.com/page/13...html5
实现原理:web页面上调用js文件时不受同源策略影响,拥有src属性的标签都拥有跨域的能力,好比<script>、<img>、<iframe>。基于此特性,开发人员总结出JSONP方法。优势:浏览器兼容性好,服务器改造工做量小。
缺点:仅适用 GET 请求;请求出错时,没法得到http错误状态码web
客户端实现
服务端实现ajax
客户端将 http 跨域查询参数 flightNumber 与回调函数 flightHandler 传递给服务器,服务器处理完后动态生成 test.js 返回,浏览器加载 test.js 完成后执行 flightHandler,完成跨域请求。
在实际编码时,客户端可以使用如 jQuery 封装好的 JSONP API。
WebSocket是一种通讯协议,使用ws://(非加密)和wss://(加密)做为协议前缀。该协议不实行同源政策,只要服务器支持,就能够经过它进行跨源通讯。 摘自阮一峰博客
WebSocket 延伸阅读(不涉及跨域)
CORS 跨源资源分享(Cross-Origin Resource Sharing)为 W3C 标准( 兼容性参考)
优势:提供安全的跨域数据传输,且不限于 GET 请求。整个CORS通讯过程,都是浏览器自动完成,不须要用户参与。对于开发者来讲,CORS通讯与同源的AJAX通讯没有差异,代码彻底同样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求。所以,实现CORS通讯的关键是服务器。只要服务器实现了CORS接口,就能够跨源通讯。
跨域资源共享(CORS) - 阿里云技术文档
跨域资源共享CORS详解 - 阮一峰segmentfault