上一篇
"明明本地跑得好好的,怎么一调接口就报错?!" 🤯 小王盯着浏览器控制台鲜红的CORS policy
错误抓狂,后端同事信誓旦旦说接口没问题,Postman测试也正常,唯独自己的Vue项目请求被浏览器无情拦截...
别慌!这就是前端开发经典的跨域问题,今天我们就用最接地气的方式,彻底搞定Vue3及Vue项目的跨域难题!
简单说:当你的前端页面地址(如http://localhost:8080
)请求的接口地址(如http://api.example.com
)协议、域名或端口任一不同,浏览器就会触发安全限制。
👉 经典报错示例:
Access to XMLHttpRequest at 'http://api.example.com/data' from origin 'http://localhost:8080' has been blocked by CORS policy...
在vite.config.js
中配置(Vue3默认使用Vite):
export default defineConfig({ server: { proxy: { '/api': { // 自定义的请求前缀 target: 'http://real-api.com', // 实际接口地址 changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') // 路径重写 } } } })
使用方式:
axios.get('/api/userinfo') // 开发时会被代理到http://real-api.com/userinfo
💡 优点:无需后端配合,配置简单,生产环境切真实接口即可
让后端同学在响应头中添加:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,POST,PUT Access-Control-Allow-Headers: Content-Type
前端零改动,但注意生产环境建议指定具体域名而非
适用于老式接口支持JSONP的情况:
function jsonp(url, callbackName) { return new Promise((resolve) => { const script = document.createElement('script') script.src = `${url}?callback=${callbackName}` window[callbackName] = (data) => { resolve(data) document.body.removeChild(script) } document.body.appendChild(script) }) } // 使用 jsonp('http://api.com/data?uid=123', 'handleData')
⚠️ 局限性:只支持GET,安全性较低
module.exports = { devServer: { proxy: { '/api': { target: 'http://target-domain.com', ws: true, // 代理websocket pathRewrite: { '^/api': '' } } } } }
location /api/ { proxy_pass http://backend-server/; add_header 'Access-Control-Allow-Origin' '$http_origin'; }
改了配置不生效?
OPTIONS预检请求失败
生产环境突然跨域
场景 | 推荐方案 |
---|---|
本地开发 | 开发代理(方案1) |
可控后端 | CORS头设置(方案2) |
临时测试 | 浏览器插件(如CORS Unblock) |
老旧系统 | JSONP(方案3) |
💬 开发者说:"跨域就像去邻居家借酱油,浏览器保安非要查你家户口本,要么证明你们是亲戚(同源),要么让邻居提前报备(CORS),要么...翻墙(代理)!"
希望这篇指南能让你彻底告别跨域烦恼! 🎉 遇到具体问题欢迎评论区交流~
本文由 蔺初蓝 于2025-07-30发表在【云服务器提供商】,文中图片由(蔺初蓝)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/486248.html
发表评论