学妹教我写代码【三】-如何正确的配置跨域

本文介绍了Web开发中的跨域概念,同源策略的作用,以及如何在SpringBoot项目中通过CORS配置来解决跨域问题,包括允许的来源、方法和头部设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做过网站的朋友们都会遇到一个问题--跨域,什么是跨域?来看比较官方的说辞。

介绍

跨域(Cross-Origin)是指在 Web 开发中,一个网页的内容试图请求另一个域下的资源,而这个请求的域(协议、域名或端口)与当前页面的域不同。这涉及到同源策略(Same-Origin Policy),同源策略是浏览器实施的一种安全机制,它防止一个页面上的脚本访问另一个页面的内容,这可以有效地防止潜在的安全威胁。
同源是指两个 URL 的协议(http、https)、域名和端口都相同。如果不满足这个条件,就被认为涉及跨域。

简单点来说,就是浏览器不允许域名:端口不全部相同的两个网页通信。但是目前我们的开发模式大部分都是前后端分离的,那也就意味着前后端大部分情况下域名:端口一定是不同的,一定会跨域,所以我们就要做一些配置,来让浏览器允许我们跨域了。这个配置一般时候在后端配置的,这里我们以springboot为例。

配置

我们介绍cors配置,它是一种通过 HTTP 头部来让浏览器与服务器进行沟通,从而决定请求是否被允许。服务器通过设置特定的响应头,如 Access-Control-Allow-Origin,来指定哪些域是被允许访问资源的。

在代码中添加这个类就可以解决跨域问题啦!


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;


/**
 * 解决浏览器跨域请求的配置类
 * */
@Configuration
public class CorsConfig {


    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        corsConfig.addAllowedOrigin("*"); // 允许的来源
        corsConfig.addAllowedMethod("*"); // 允许所有HTTP方法
        corsConfig.addAllowedHeader("*"); // 允许所有HTTP请求头
//        corsConfig.setAllowCredentials(true); // 允许携带凭证
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfig);

        return new CorsFilter(source);
    }
}

解释与注意事项

下面来解释一下代码。

@Configuration 注解标识这是一个配置类。
@Bean 注解标识 corsFilter() 方法将返回一个 CorsFilter 对象,该对象用于处理跨域请求。
在 corsFilter() 方法中,创建了一个 CorsConfiguration 对象,并配置了一些跨域规则,如允许的来源、允许的方法和允许的头部。

注意,这里注释了

corsConfig.setAllowCredentials(true); 

是因为使用 setAllowCredentials(true) 时,addAllowedOrigin 不再允许通配符 *,而是要指定具体的允许来源。使用凭证时,浏览器不允许将凭证发送到通配符来源。

所以在生产环境中,我们一般下面这样配置的

        corsConfig.addAllowedOrigin("前端在服务器的ip地址"); // 允许的来源
        corsConfig.addAllowedMethod("*"); // 允许所有HTTP方法
        corsConfig.addAllowedHeader("*"); // 允许所有HTTP请求头
        corsConfig.setAllowCredentials(true); // 允许携带凭证

将允许的来源设定为前端的运行的ip地址,然后允许携带凭证。

还有朋友可能会有疑问,跨域配置是怎么生效的?

答案是下面的代码

  UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfig);


代码创建了一个 UrlBasedCorsConfigurationSource 对象,并注册了上述配置信息,指定了对所有路径都生效。
这样配置后,Spring 应用程序将允许来自任何来源(*)的请求,支持任何 HTTP 方法,允许任何 HTTP 头,如果需要可以携带凭证。跨域问题就解决啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢林365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值