跨域
什么是跨域
简单说就是跨服务器访问是不被允许的
同源策略
由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容
注
:同源策略,单说来就是同协议,同域名,同端口
examp:
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com:8000/a.js
http://www.a.com/8080b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.b.com/a.js
http://www.a.com/b.js 不同域名 不允许
跨域的本质
跨域网站介绍:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
跨域如何解决
package com.czg.mall.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsConfigurationSource;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
@Configuration
public class MyCorsConfiguration {
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration configuration = new CorsConfiguration();
// 配置跨域的信息
configuration.addAllowedHeader("*");
configuration.addAllowedMethod("*");
// SpringBoot升级到2.4.0 之后需要使用该配置
configuration.addAllowedOriginPattern("*");
configuration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",configuration);
return new CorsWebFilter(source);
}
}
注意
跨域问题全局统一配置 , 不要出现多个跨域的配置 ,可能会出错
基本操作流程
场景
前后端分离
解决流程
- 前端统一访问路径更改
- 被访问的后端项目配置放行
- 功能模块较多的话一般放在网关中进行全局配置