CORS跨域怎么办?前端开发者必看的实战解决方案
大家好呀!今天咱们来聊聊一个让无数前端开发者头疼的问题——CORS跨域怎么办,说实话,我第一次遇到跨域报错的时候,那个红色的错误提示简直让我怀疑人生,浏览器控制台一片飘红,心里那个急啊!相信很多小伙伴都有过类似的经历吧?

什么是CORS?先搞清楚敌人是谁
CORS,全称是Cross-Origin Resource Sharing,翻译过来就是"跨源资源共享",就是浏览器出于安全考虑,默认不允许你从一个域名去请求另一个域名的资源,比如你的前端跑在http://localhost:3000,后端跑在http://localhost:8080,这时候一发请求,浏览器就直接给你拦下来了,控制台蹦出那句经典的:
Access to XMLHttpRequest at 'xxx' from origin 'xxx' has been blocked by CORS policy
看到这句话是不是血压都上来了?别急,下面我就把自己踩过的坑和总结出来的解决方案,一股脑儿分享给大家。
后端设置响应头(最推荐)
其实CORS本质上是后端需要解决的问题,不是前端能单独搞定的,最正统的做法就是让后端在响应头里加上这几个字段:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
如果用的是Node.js + Express,直接一行app.use(cors())就搞定了,是不是超级爽?如果是Spring Boot,加个@CrossOrigin注解也行,这个方案最干净,生产环境首选。
Nginx反向代理(生产环境神器)
如果你没法让后端改代码,或者说后端是第三方的API,那怎么办?这时候Nginx反向代理就是救星了!原理很简单,让前端请求同源的Nginx,然后Nginx再转发到真实的后端服务,这样浏览器就认为是同源请求了,压根不会触发CORS检查。
配置大概长这样:
location /api/ {
proxy_pass http://backend-server:8080/;
}
这招在实际项目中特别常用,强烈建议大家掌握。
开发环境用代理(Vue/React都适用)
开发阶段最方便的就是用脚手架自带的代理功能,Vue CLI里改vue.config.js,Vite里改vite.config.js,配置一个proxy就行:
server: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}
改完重启一下,跨域问题瞬间消失,那感觉,别提多爽了!
JSONP(老古董,应急用)
这玩意儿现在基本淘汰了,只能发GET请求,局限性太大,除非你对接的是特别老旧的接口,否则真不建议用。
最后唠叨几句
CORS跨域怎么办?核心思路就是:能后端解决就后端解决,后端改不了就上代理,开发环境用脚手架代理,生产环境用Nginx,千万别想着前端硬刚,什么mode: 'no-cors'之类的,那都是治标不治本,反而会引入新问题。
好了,今天的分享就到这里,如果你也在跨域问题上踩过坑,欢迎在评论区吐槽,咱们一起交流!记得点赞收藏,下次遇到跨域问题直接翻出来看就行啦~