解决跨域请求(CORS)的方法

1、什么是跨域 

跨域问题是指在浏览器中,当一个域下的网页尝试请求另一个域下的资源时,由于浏览器的同源策略限制,导致无法直接进行通信的问题。同源策略是浏览器的一项安全功能,要求两个页面必须具有相同的协议、域名和端口号才能进行交互。如果协议、域名或端口号有任何一个不同,就会发生跨域。

2、 服务器端设置 CORS 响应头(最常用)

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 所有接口
            .allowedOrigins("*")    // 允许所有来源
            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的方法
            .allowedHeaders("*")    // 允许所有请求头
            .allowCredentials(true) // 允许携带凭证
            .maxAge(3600);         // 预检请求的有效期
    }
}

3、 使用代理服务器

// vue.config.js
module.exports = {
    devServer: {
        proxy: {
            '/api': {
                target: 'http://target-server.com',
                changeOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
    }
}

4、 Nginx 反向代理配置

server {
    listen 80;
    server_name your-domain.com;

    location /api/ {
        proxy_pass http://target-server.com/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # CORS 配置
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }
}

各种方法的比较:

1、CORS(跨域资源共享)

  • 优点:标准化的解决方案,支持所有类型的请求
  • 缺点:需要服务器端配合

2、代理

  • 优点:对前端透明,不需要修改代码
  • 缺点:需要额外的代理服务器,可能增加请求延迟

3、Nginx 反向代理

  • 优点:可靠,适合生产环境
  • 缺点:需要配置和维护 Nginx 服务器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值