解决程序员经常遇到的跨域问题

2 篇文章 0 订阅
1 篇文章 0 订阅

什么是跨域

在前端领域中,跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能同源使用的限制。

什么是同源策略?

同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

同源策略限制以下几种行为:

  • Cookie、LocalStorage 和 IndexDB 无法读取
  • DOM和JS对象无法获得
  • AJAX 请求不能发送
综上可以简单理解为:
  • 同一个服务器,或者同一个终端,同路径不同端口之间资源无法正常交互

解决办法:

  • 后端:
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;


/**
* @user     :subr
* @data     :2021-07-16 10:31:48
*/
@Configuration
public class WebConfig implements WebMvcConfigurer { 

    @Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //1) 允许的域,建议不要写*,否则cookie就无法使用了
        config.addAllowedOrigin("http://xxx.xxx.com");
      	/*config.addAllowedOrigin("*");*/
     	/*config.addAllowedOrigin("http://api.xxx.com");*/
        config.addAllowedOrigin("*");
        //2) 是否发送Cookie信息
        config.setAllowCredentials(true);
        //3) 允许的请求方式
        config.addAllowedMethod("*");
        /*config.addAllowedMethod("HEAD");*/
        /*config.addAllowedMethod("GET");*/
        /*config.addAllowedMethod("PUT");*/
        /*config.addAllowedMethod("POST");*/
        /*config.addAllowedMethod("DELETE");*/
        /*config.addAllowedMethod("PATCH");*/
        // 4)允许的头信息
        config.addAllowedHeader("*");
        // 4)有效时间
        config.setMaxAge(3600L);
 
        //2.添加映射路径,我们拦截一切请求
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
 
        //3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}
  • 前端:
proxy:{
      // 配置跨域
      '/api': {
        target: 'http://*********:****',
        changeOrigin: true,
        secure: false,
        pathRewrite: {
          '^/api': ''
        }
      },
    },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值