跨域

一、同源策略

1、定义:

同源策略即协议、域名、端口都要相同。不同源的客户端脚本在没有授权的情况下,不能读取对方的资源。

2、目的:

保证用户信息安全,防止恶意网站窃取数据。

3、哪些行为受同源限制:

cookie、webStorage、indexDB

DOM、iframe对象无法读取

ajax不能发送请求 (报错:。。。No 'Access-Control-Allow-Origin'...)

4、哪些行为不受同源限制:

script标签、img标签、link标签

页面中的链接、重定向、表单提交

 

二、跨域

当我们去访问一个不同源下的资源的时候就会产生跨域。

解决跨域的方法:

客户端与服务器端之间:

1、(后端)服务器配置cors,跨域资源共享;使用自定义的http头部,让浏览器与服务器进行沟通。

res.header("Access-Control-Allow-Origin", "*"); //设置请求来源不受限制
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); //设置请求方式

2、(后端)nginx反向代理(服务器之间没有同源策略的限制)

3、jsonp,利用script标签可以跨域的特性,只能使用get方法,不安全。

4、如果使用webpack的话,修改webpack选项devServer的代理功能proxy:

proxy:{
   '/api':{
       target:'', //请求的实际地址
       changeOrgin:true, //是否跨域
           /''/
       pathRewrite: {   //将/api 替换为空
           '^/api':''
      }
  }
}
客户端之间:

1、html5 postMessage(),客户端之间传递数据

window.onload = function() {  
   var ifr = document.getElementById('ifr');  
   var targetOrigin = "http://www.google.com";  
   ifr.contentWindow.postMessage('hello world!', targetOrigin);  
};  

2、document.domain(对于具有相同上级域名的情况,document.domian='baidu.com'),这时浏览器会认为他们都处于同一个域下。问题:当其中一个站点被攻击后,另一个站点也会有安全漏洞。

原文地址:https://www.cnblogs.com/annie211/p/12682888.html