原文链接:https://www.cnblogs.com/zhilili/p/14738262.html
一 什么是跨域?
主要是由于浏览器的同源策略引用的,同源策略是浏览器的安全机制,当协议,域名,端口三者有一个不同,浏览器就禁止访问资源。
如下 url 上的源是:http://www.company.com:80
如果地址里面的协议,域名,端口号都相同就是属于同源的。
* http://www.a.com/dir/page.html ----成功
* http://www.child.a.com/test/index.html ----失败,域名不同
* https://www.a.com/test/index.html ----失败,协议不同
* http://www.a.com:8080/test/index.html ----失败,端口号不同
不受同源策略限制的有:
* 页面中的连接,重定向以及表单的提交是不会收到同源策略的影响的;
* 跨域资源的引入是可以的,但是js不能读写加载的内容,如嵌套到页面中的,,,
严格的来讲:浏览器并不是全部禁止跨域资源的请求,它只是禁止对跨越资源的读操作。浏览器的同源限制策略是这样的:
* 浏览器允许跨域写操作,如连接,重定向;
* 浏览器允许跨域资源嵌入,如img,script标签。
* 浏览器不允许跨域读操作
二 解决跨域的方法?
最常用的解决跨域的常用的方法有JSONP,CORS,
(1)使用JSONP来解决跨域
实现原理:a.com/jsonp.html 想要得到 b.com/main.js 里面的数据,可以在 jsonp.html 里面创建一个回调函数 xxx,动态的添加