文章目录
跨域
简介
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的:
1、资源跳转:A链接、重定向、表单提交
2、资源嵌入: < link>、< script>、< img>、< frame>等dom标签,还有样式中background:url()、@font-face()等文件外链
3、脚本请求: js发起的ajax请求、dom和js对象的跨域操作等
其实我们通常所说的跨域是狭义的,是由 浏览器同源策略 限制的一类请求场景。
同源策略是针对浏览器的。
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。
所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
协议、主机和端口都相同,则同源:
- http://www.nealyang.cn/index.html 调用http://www.nealyang.cn/server.php 非跨域
- http://www.nealyang.cn/index.html 调用 http://www.neal.cn/server.php 跨域,主域不同
- http://abc.nealyang.cn/index.html 调用 http://def.nealyang.cn/server.php 跨域,子域名不同
- http://www.nealyang.cn:8080/index.html 调用 http://www.nealyang.cn/server.php 跨域,端口不同(http默认端口80,https默认443)
- https://www.nealyang.cn/index.html 调用 http://www.nealyang.cn/server.php 跨域,协议不同
- localhost 调用 127.0.0.1 跨域
URL 说明 是否允许通信
http://www.demo.com/a.js
http://www.demo.com/b.js 同一域名,不同文件或路径 允许
http://www.demo.com/lab/c.js
http://www.demo.com:8000/a.js
http://www.demo.com/b.js 同一域名,不同端口 不允许
http://www.demo.com/a.js
https:/