一、为什么要跨域?
跨域问题来源于JavaScript的【同源策略】,即只有【协议+主机名+端口号】相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和Ajax的,HTML本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等。
二、实现跨域的两种方式
1、JSONP
1.AJAX直接请求普通文件存在跨域无权限访问的问题,不管是静态页面也好
2.不过我们在调用js文件的时候又不受跨域影响,比如引入jQuery框架的,或者是调用相片的时候
3.凡是拥有src这个属性的标签都可以跨域例如<script><img><iframe>
4.如果想通过纯web端跨域访问数据只有一种可能,那就是把远程服务器上的数据装进js格式的文件里.
5.而Json又是一个轻量级的数据格式,还被js原生支持
6.为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback 参数给服务端
传统的跨域方案是JSONP,JSONP虽然能解决跨域但是有一个很大的局限性,那就是只支持GET请求,不支持其他类型的请求。
2、Cors
Cors(跨域源资源共享)
(Cors,Cross-origin resource sharing)是一个W3C标准它是一份浏览器技术的规范
它提供了Web服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略
这是JSONP模式的现