浏览器同源策略
定义
同源策略不属于HTTP协议,它是浏览器的一个规范限制。
同源即两个网络资源的“协议”、“域名”、“端口”都是一样的。浏览器不允许A网站去访问B网站的资源,这就是浏览器的同源策略
作用
浏览器的同源策略保证了用户保存在浏览器中的其他网站的信息(比如cookie),不会被恶意的网站or脚本来获取到,并做一些侵犯用户权益的事情。打个比方,加入没有同源策略就会出现以下情况:
为了维护网站运行,小黑挂了一张收款码,觉得网站不错的可以适当资助一点,可是无奈伸手党太多,小黑的网站入不敷出。
于是他非常生气的在网页中写了一段js代码,使用ajax向淘宝发起登陆请求,因为很多数人都访问过淘宝,所以电脑中存有淘宝的cookie,不需要输入账号密码直接就自动登录了,然后小黑在ajax回调函数中解析了淘宝返回的数据,得到了很多人的隐私信息,转手一卖,小黑的网站终于盈利了。
如果跨域也可以发送AJAX请求的话,小黑就真的获取到了用户的隐私并成功获利了!!!
为了防止小黑这种黑客侵犯用户的隐私,同源政策出现了。
同源政策:不是同协议、同域名、同端口的网页无法相互访问。
------引用自 AJAX跨域访问被禁止的原因
Springboot项目设置跨域(CORS,cross origin resource share)
设置跨域允许请求的方式有多种,对于Springboot项目,我们可以在服务端设置允许跨域请求。只需要在Spring Context中添加一个CorsFilter即可,代码如下:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author xrw
* 跨域请求配置
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
//从配置文件中读取允许访问的非本机地址
@Value("${wedOrigin.name}")
private String wn;
//允许跨域请求
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
//遍历数组,将允许访问的地址添加进去
String [] result = wn.split(",");
for (int i=0;i<result.length;i++){
corsConfiguration.addAllowedOrigin(result[i]);
}
//这一句表示允许任何地址访问服务器
//corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
也可以直接在Springboot的配置文件(application.yaml)中配置允许跨域访问当前应用的源(origin)
wedOrigin:
name: [192.168.1.1,127.0.0.1]