• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > vue怎样解决axios请求出现前端跨域问题(实例详解)

vue怎样解决axios请求出现前端跨域问题(实例详解)

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了vue前端跨域,axios请求,前端跨域问题等相关知识,希望对您有所帮助

本篇文章给大家带来了vue怎样解决axios请求出现前端跨域问题的相关知识,希望对大家有帮助。

vue怎样解决axios请求出现前端跨域问题(实例详解)

在正常开发中跨域问题有很多的解决方案。最常见的就是后端修改响应头。但是前端也可以解决,通过反向代理。为了防止下一次这样的错误出现,记录一下,总结一下。

所以现在我们来复盘一下,然后解决掉。


一、为什么会出现跨域的问题?

跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的。而axios是通过Promise实现对ajax技术的一种封装,也同样存在跨域问题。


二、解决方案

这里我就使用本机的开启两个不同的端口来测试。

未处理跨域前的报错


vue怎样解决axios请求出现前端跨域问题(实例详解)


没有做跨域处理请求是这样的

axios.get('http://localhost:8080/getData').then(res => {  console.log(res)}).catch(err => {  console.error(err); })

反向代理

前端进行反向代理来解决跨域问题。原理图如下:


vue怎样解决axios请求出现前端跨域问题(实例详解)


vue项目的端口是8081


vue怎样解决axios请求出现前端跨域问题(实例详解)


自己电脑开启了一个8080的端口,请求/getData就会放回json数据。


配置代理

1、在vue2.0中

修改config文件夹下的index.js文件,在proxyTable中加上如下代码:

proxyTable: {   '/apis': {     target: 'http://localhost:8080/',  //要解决跨域的接口的域名     secure:false,           //如果是https接口,需要配置这个参数     changeOrigin: true,  // 如果接口跨域,需要进行这个参数配置     pathRewrite: {       '^/apis': ''  // 路径重写     }   }, },

然后在请求中axios中这样写

axios.get('apis/getData').then(res => {  console.log(res)}).catch(err => {  console.error(err); })

分析:

target后面的就是需要请求的网址的公共部分,然后用/apis来代理这个,最后重写一些路径,请求的时候使用的我们的代理的apis来作为前缀。

这个前缀我们可以自定义,proxyTable是对象,所以我们可以配多个代理。


跨域解决


vue怎样解决axios请求出现前端跨域问题(实例详解)


2.在vue3.0中

vue-cli3 脚手架搭建完成后,项目目录中没有 vue.config.js 文件,需要手动创建

新建一个vue.config.js,配置以下信息,同样可以解决。

module.exports = {       devServer: {        proxy: {            '^/api': {                target: 'http://localhost:8080/',//接口的前缀                ws:true,//代理websocked                changeOrigin:true,//虚拟的站点需要更管origin                pathRewrite:{                    '^/api':''//重写路径                }            }        }    }}


小结:

changeOrigin: true :开启代理:在本地会创建一个虚假服务器,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端就可以进行数据的交互。

apis就是接口实际请求的前缀,去代理了我们的实际的接口前缀的公共部分,也就是协议+主机名+端口号

比如 请求接口为localhost:8080/getData 我们只需要传入:getData

那么公共的域名就是 localhost:8080/,我们就是在请求接口的公共域名localhost:8080/改为api/即可!

把项目运行起来可以看到接口请求的路径为 :localhost:8081/apis/getData

而进过代理后,实际的请求路径是 : localhost:8080/getData


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • vue怎样解决axios请求出现前端跨域问题(实例详解)

相关文章

  • 2022-04-29搜索引擎优化中关键词的分类
  • 2022-04-29怎么解决PHP高并发(商品秒杀)问题?两种解决方案分享
  • 2022-04-29PHP怎么实现评论回复功能
  • 2022-04-29Photoshop制作逼真的镶嵌钻石艺术字
  • 2022-04-29DedeCMSV5.6版自动采集功能规则使用基本知识详细讲
  • 2022-04-29PhotoShop打造可爱的糖果文字特效制作教程
  • 2022-04-29WordPress建站教程,纯代码实现wordpress防止发布文章出现标题重复,自动检测重复标题文章
  • 2022-04-29Discuz搭建的论坛如何修改后台地址?
  • 2022-04-29js实现wordpress文章复制自动加版权信息
  • 2022-04-29PHP解密支付宝小程序的加密数据、手机号的示例代码

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PHP怎么只保留汉字
    • thinkphp的钩子的两种配置和两种调用方法
    • Phpcms V9栏目循环调用采用IF判断自定义不显示指定
    • Laravel 图片上传失败怎么办
    • ThinkPHP5把动态链接库赋给变量而导致的执行多条sql数据合并问题
    • 用PHP将女友照片转成可爱的动漫头像!
    • PS打造线描风格舞者壁纸平面作品设计制作教程
    • 聊聊Bootstrap中的导航条
    • PHP如何删除Array数组指定key
    • PHP上传多张图片时,选择图片后即可预览的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有