什么是浏览器的同源策略?以及跨域的解决方法

我们可能会问,浏览器为什么会设置同源策略这个东西? 说起同源策略,最早要追溯到:NetScape,那么可能又有人要问NetScape是个什么东西?

所谓NetScape是指美国网景通信公司,他的英文全称是:Netscape Communications Corporation ,这个公司因为他的同名网页浏览器Netscape Navigator而闻名。

同源策略是由NetScape提出的一个著名的安全策略。所谓的同源,指的是协议域名端口号相同,同源策略的目的为了保证用户信息的安全,防止恶意的网站窃取数据,

只允许本域名下的接口之间的交互。只要协议,域名,端口、其中一个不同,就会导致跨域出现。一般出现以下报错提示,就是跨域了。

No 'Access-Control-Allow-Origin' header is present on the requested resource.

为什么会有这种限制呢?那么我们来举个例子。

比如: 某网站是一家银行的官网,当用户登陆该网站办理完业务后,用户又去其他网站浏览。如果此时没有同源策略的限制,那么其他网站也可以访问该银行官网,那么这样其他网站也就能读取该银行官网的cookie信息,很显然这样就会存在很大的完全隐患,加入银行官网的cookie中包含客户的隐私和保留的登陆账户和密码,那么一些不法分子就可能会盗取客户隐私做一些不法之事,对用户而言,也就是一个很大的威胁。

所以NetScape在最初就对浏览器的安全方面有所考虑,使用同源策略这个安全措施,一旦不同源,那么浏览器就会自动拦截访问,也就是平常所说的跨域问题。

说到同源肯定要分别解释协议,域名,端口这三个东西。

协议:

  常见的有两种协议:httphttps 协议

  例如:http://www.xxx.com/  这里使用的就是http协议, 而https://www.xxx.com/使用的就是https 协议。

  两者区别:HTTP协议是一种使用明文数据传输的网络协议,所以存在安全隐患。而HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据密。

  所以相对于http而言,https 相对更安全,所以现在大多数网站都在使用https协议。

域名:

  例如:http://www.xxx.com/   这里www.xxx.com就是他的域名

端口号:

  http默认端口为 80

  https默认端口为 443

  当采用默认端口的时候端口号可以省略不写

现在对跨域的解决方法大概有以下几种:

  1、 通过jsonp跨域
  2、 document.domain + iframe跨域
  3、 location.hash + iframe
  4、 window.name + iframe跨域
  5、 postMessage跨域
  6、 跨域资源共享(CORS)
  7、 nginx代理跨域
  8、 nodejs中间件代理跨域
  9、 WebSocket协议跨域

 

posted @ 2020-04-08 19:03  鲸鱼非鱼  阅读(710)  评论(0编辑  收藏  举报