什么是跨域,如何处理跨域

1.什么是跨域?

跨域(Cross-Origin)是浏览器的**同源策略(Same-origin policy)**所施加的安全限制。当一个请求的协议、域名或端口与当前页面不同时,就会触发跨域限制。

2.什么是同源

同源是指协议、域名、端口号三者相同视为同源。

  1. a.com:8080a.com:80 → ❌ 不同源(端口不同)
  2. a.coma.com → ❌ 不同源(协议不同)
  3. a.comb.com → ❌ 不同源(域名不同)

3.常见的跨域错误信息

  • No 'Access-Control-Allow-Origin' header present
  • Blocked by CORS policy
  • The response to preflight request doesn't pass access control check

4.一般出现跨域的情况的请求类型

类型 说明
简单请求(Simple Request) GET/HEAD/POST 请求,且 Content-Type 是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain
预检请求(Preflight Request) 使用 OPTIONS 方法检查服务器是否允许实际请求(如 PUT、DELETE、带自定义 Header 的请求)

5.后端解决跨域问题的常见方法

java 复制代码
//1.java
response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有来源
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");




//2.sprinBoot
@Configuration
public class CorsConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedOrigins("http://localhost:8080") // 指定允许的源
                        .allowedMethods("GET", "POST", "PUT", "DELETE")
                        .allowedHeaders("Content-Type", "Authorization")
                        .allowCredentials(true)
                        .maxAge(3600); // 预检缓存时间
            }
        };
    }
}
⚠️ 注意:生产环境建议不要使用 allowedOrigins("*"),尤其是涉及 Cookie 或敏感数据时。
相关推荐
一 乐1 天前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
码事漫谈1 天前
Protocol Buffers 编码原理深度解析
后端
码事漫谈1 天前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
踏浪无痕1 天前
AI 时代架构师如何有效成长?
人工智能·后端·架构
程序员小假1 天前
我们来说一下无锁队列 Disruptor 的原理
java·后端
武子康1 天前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr1 天前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
源码获取_wx:Fegn08951 天前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
独断万古他化1 天前
【Spring 核心: IoC&DI】从原理到注解使用、注入方式全攻略
java·后端·spring·java-ee
毕设源码_郑学姐1 天前
计算机毕业设计springboot基于HTML5的酒店预订管理系统 基于Spring Boot框架的HTML5酒店预订管理平台设计与实现 HTML5与Spring Boot技术驱动的酒店预订管理系统开
spring boot·后端·课程设计