浅谈 Vue 的跨域问题

Vue 跨域问题

今天一个小老弟在那问我,哥给我看看代码,接口都测试通过了,怎么前端拿不到后端的数据,控制台老是报这个错误“Access-Control-Allow-Origin”。这就是跨域的问题。

出现跨域问题的原因

由于浏览器的同源策略导致,是浏览器对 javascript 施加的安全机制。通俗的讲就是两个不在同一个域名端口上的项目,在想获取资源时,一方对另一方施加访问的限制。

这里拿aaa.com域名来举例,aaa.com对应的外网IP地址为199.6.7.2

URL 是否存在跨域
http://www.aaa.com/a.js
http://www.aaa.com/b.js
同一域名 不存在跨域
http://www.aaa.com/aaa/a.js
http://www.aaa.com/bbb/b.js
同一域名不同文件夹 不存在跨域
http://www.aaa.com:8080/a.js
http://www.aaa.com:8000/b.js
同一域名不同接口 存在跨域
http://www.aaa.com/a.js
https://www.aaa.com/b.js
同一域名不同协议 存在跨域
http://www.aaa.com/a.js
http://199.6.7.2/b.js
域名和对应域名的IP地址 存在跨域
http://www.aaa.com/a.js
http://son.aaa.com/b.js
同一域名不同子域 存在跨域
http://www.aaa.com/a.js
http://www.son.aaa.com/b.js
同一域名不同二级域名 存在跨域
http://www.aaa.com/a.js
http://www.bbb.com/b.js
不同域名 存在跨域

解决跨域

1. Vue解决

这是我们的前端项目地址:http://127.0.0.1:8080/

这是我们的后端接口地址:http://127.0.0.1:8000/

(1)在vue项目的根目录下,新建vue.config.js文件

(2)写入以下代码

module.exports = {
  // vue.js里解决跨域问题
  devServer: {
    proxy: {
      '/api': {
        target: 'http://127.0.0.1:8000/', // 目标地址
        changeOrigin: true,
        pathRewrite: {
          '^/api': '' // 需要重写的地址
        }
      }
    }
  }
}

说明:这里当前端访问到 /api 这个路径的时候,会将url代理到 http://127.0.0.1:8000/ 这个目标地址上,并将 /api 这个路径重写。

举个例子:这是我们后端提供的接口 http://127.0.0.1:8000/system/slider/list ,如果前端的axios直接访问这个接口的话,由于前端的端口是8080,后端的端口号是8000,会引起不同域名不同端口的跨域问题。于是,我们引入上面的代码段,让前端访问的接口改为 http://127.0.0.1:8080/api/system/slider/list 。这样前端访问的接口 http://127.0.0.1:8080/api 这一段url会代理到 http://127.0.0.1:8000 上,这样就满足了同源策略,因此解决跨域问题,接口得以正常访问。

2. Nginx解决

使用nginx作为代理服务器,这样用户只需要在80端口上进行前后端的交互,这样就能避免不同源的问题,因此来实现跨域。

(1)打开nginx.conf文件

(2)修改nginx配置为下面代码

server {
    listen 80;
        server_name 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }

    location ~ /api {
        proxy_pass http://127.0.0.1:8000;
    }
}

说明:Nginx监听80端口,将 http://127.0.0.1 的所有请求服务转发到127.0.0.1端口为8080;将 http://127.0.0.1/api 请求转发到 http://127.0.0.1:8000 上,nginx实现跨域的原理,实际上就是把web项目和后端接口项目放到同一个域中,这样满足同源的策略,然后根据请求地址去请求不同的服务器。

举个例子:当用户访问 http://127.0.0.1 这个地址时,会被nginx转发到 http://127.0.0.1:8080 这个地址上,这样就能访问到我们的前端项目;当用户想访问 http://127.0.0.1:8000/system/slider/list 这个接口时,就必须把接口url换个形式,用 http://127.0.0.1/api/system/slider/list 这个url来访问接口,让其接口请求转发到 http://127.0.0.1:8000/system/slider/list 这个接口url上。

如有不当之处,欢迎指正,谢谢!!!


如需转载,请加上本文的链接并标明出处

一条爱吃屎的狗:https://www.qnmlgb.top

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354