什么是跨域

什么是跨域?

  简单的说,就是从一个区域到另一个区域,例如,小时候上学和同桌在书桌上划三八线,那么在三八线的左面和右面,就会产生两个区域,一块属于自己,另一块属于你的同桌,在自己的区域内文具书本可以随意摆放,如果,你把文具和书本摆放到同桌的区域,他是不同意的,并且有可能会揍你!哈哈!

  那么在web中是怎么区分域的呢,根据协议,域名,端口,三者之间任意一个与当前页面URL不同就是产生了跨域。

  

为什么会出现跨域的问题?

  这是由 Netscape 公司提出的一个著名的安全策略“同源策略”,所有支持 JavaScript 的浏览器都会使用这个策略。

  同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。这个浏览器策略很旧,从 Netscape Navigator 2.0 版本开始就存在。

  克服该限制的一个相对简单的方法是让 Web 页面向它源自的 Web 服务器请求数据,并且让 Web 服务器像代理一样将请求转发给真正的第三方服务器。尽管该技术获得了普遍使用,但它是不可伸缩的。另一种方式是使用框架要素在当前 Web 页面中创建新区域,并且使用 GET 请求获取任何第三方资源。不过,获取资源后,框架中的内容会受到同源策略的限制。

  克服该限制更理想方法是在 Web 页面中插入动态脚本元素,该页面源指向其他域中的服务 URL 并且在自身脚本中获取数据。脚本加载时它开始执行。该方法是可行的,因为同源策略不阻止动态脚本插入,并且将脚本看作是从提供 Web 页面的域上加载的。但如果该脚本尝试从另一个域上加载文档,就不会成功。幸运的是,通过添加 JavaScript Object Notation (JSON) 可以改进该技术。

原文地址:https://www.cnblogs.com/wmzll/p/14088682.html