Axiso解决跨域访问

2023-05-16

首先请检查下你的 Vue 版本,Vue2 和 Vue3 跨域方式不同:

$ vue -V
2.X or 3.X

一、Vue2 版本

这里以访问 Ve2x 的一个公告API为例,直接访问如下:

this.$axios.get("https://www.v2ex.com/api/site/info.json")
.then(res=>{
    console.log(res)
})
.catch(err=>{
    console.log(err)
})

当我们运行程序后,控制台报错如下:

在这里插入图片描述
可以看到浏览器拦截了我们的请求,因为我们跨域了,下面解决跨域问题。

Step1:配置BaseUrl

首先在 main.js 中,配置下我们访问的Url前缀:

import Vue from 'vue'
import App from './App'
import Axios from 'axios'

Vue.prototype.$axios = Axios
Axios.defaults.baseURL = '/api'
Axios.defaults.headers.post['Content-Type'] = 'application/json';

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  components: { App },
  template: '<App/>'
})

关键代码是:Axios.defaults.baseURL = '/api',这样每次发送请求都会带一个/api的前缀。

Step2:配置代理

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

'/api':{
    target: "https://www.v2ex.com/api",
    changeOrigin:true,
    pathRewrite:{
        '^/api':''
    }
}

在这里插入图片描述

Step3:修改请求Url

修改刚刚的axios请求,把url修改如下:

this.$axios.get("/site/info.json")
.then(res=>{
	console.log(res)
})
.catch(err=>{
	console.log(err)
})

Step4:重启服务

重启服务后,此时已经能够访问了:

在这里插入图片描述

原理:

因为我们给url加上了前缀 /api,我们访问 http://127.0.0.1:19323/site/info.json 就当于访问了:http://127.0.0.1:19323/api/site/info.json。(假设本地访问端口号为 19323)

又因为在 index.js 中的 proxyTable 中拦截了 /api ,并把 /api 及其前面的所有替换成了 target 中的内容,因此实际访问 Url 是https://www.v2ex.com/api/site/info.json

二、Vue3 版本

升级到 Vue3 后,会发现 Vue2 中存放配置的 config 文件夹没有了,大家不要慌张。可以在 package.json 文件的同级目录下创建 vue.config.js 文件。给出该文件的基础配置:

module.exports = {
    outputDir: 'dist',   //build输出目录
    assetsDir: 'assets', //静态资源目录(js, css, img)
    lintOnSave: false, //是否开启eslint
    devServer: {
        open: true, //是否自动弹出浏览器页面
        host: "localhost", 
        port: '8081', 
        https: false,   //是否使用https协议
        hotOnly: false, //是否开启热更新
        proxy: null,
    }
}

在这里插入图片描述

Vue3 解决跨域,内容只有第二步配置代理 和 Vue2 不同,其他的一致。

Step2:配置代理

修改 vue.config.js 中 devServer 子节点内容,添加一个 proxy:

devServer: {
    open: true, //是否自动弹出浏览器页面
    host: "localhost", 
    port: '8081',
    https: false,
    hotOnly: false, 
    proxy: {
        '/api': {
            target: 'https://www.v2ex.com/api', //API服务器的地址
            changeOrigin: true,
            pathRewrite: {
                '^/api': ''
            }
        }
    },
}

三、番外

当然,跨域问题也可以由后端解决,将下面这个过滤器加入程序即可。

public class CorsFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        // 不使用*,自动适配跨域域名,避免携带Cookie时失效
        String origin = request.getHeader("Origin");
        if(StringUtils.isNotBlank(origin)) {
            response.setHeader("Access-Control-Allow-Origin", origin);
        }

        // 自适应所有自定义头
        String headers = request.getHeader("Access-Control-Request-Headers");
        if(StringUtils.isNotBlank(headers)) {
            response.setHeader("Access-Control-Allow-Headers", headers);
            response.setHeader("Access-Control-Expose-Headers", headers);
        }

        // 允许跨域的请求方法类型
        response.setHeader("Access-Control-Allow-Methods", "*");
        // 预检命令(OPTIONS)缓存时间,单位:秒
        response.setHeader("Access-Control-Max-Age", "3600");
        // 明确许可客户端发送Cookie,不允许删除字段即可
        response.setHeader("Access-Control-Allow-Credentials", "true");
        
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) {

    }

    @Override
    public void destroy() {
    }

    /*
    注册过滤器:
    @Bean
    public FilterRegistrationBean registerFilter() {
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>();
        bean.addUrlPatterns("/*");
        bean.setFilter(new CorsFilter());
        // 过滤顺序,从小到大依次过滤
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);

        return bean;
    }
     */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Axiso解决跨域访问 的相关文章

  • 刚装好的Ubuntu18插上耳机没声音?

    巧了不是 前几天刚经历了Windows10插上耳机没声音的坑 xff0c 今天装了个Ubuntu xff0c 正准备插上耳机开心地学习 结果 xff1f 又没声音 xff1f xff1f xff1f 好吧 xff0c 继续百度解决吧 xff
  • 谷粒学院(二十四)Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)

    目录 一 安装内容二 实现过程1 不使用Jenkins2 使用Jenkins 三 准备工作1 Github仓库准备测试项目2 安装java环境 xff08 jdk环境 xff09 3 安装maven环境4 安装Git环境5 安装Docker
  • 谷粒学院【网上教育】总结

    一 项目的启动运行 1 后端项目 将后端项目克隆到本地 xff0c 导入到idea中nacos 在目录下 xff0c 打开bin文件夹 xff0c 双击 startup cmdredis xff0c 在目录下 xff0c 使用cmd xff
  • Navicat Premium 12 卸载和注册表的删除

    卸载就不用我说了 xff0c win10也好 xff0c win7也好直接windows设置里的卸载 xff0c 或者你觉得别的软件卸载的比较干净也行 不过还是不会删掉注册表 xff0c 甚至文件夹都不删除 xff1a 这是卸载 xff0c
  • JDK下载安装及环境变量配置(图片详解)

    一 下载并安装JDK 1 下载 搜索 jdk官方下载 或是直接进入Sun公司的官网 xff08 https www oracle com xff09 下面是JDK版本下载页面 xff1a https www oracle com java
  • 谷粒商城 - 项目环境搭建

    文章目录 1 安装 linux 虚拟机2 安装docker3 docker安装mysql4 docker安装redis5 开发环境统一1 Maven2 Idea amp VsCode 插件3 安装配置git 6 创建git仓库7 创建对应项
  • 《阿里云服务器搭建》------ 安装jdk

    1 首先查看我们linux服务器的操作系统 执行命令 xff1a cat proc version 备注这里是 xff08 x86 64 xff09 表示64位 2 登录Oracle官网 xff0c 下载JDK JDK官网下载 xff1a
  • IDEA连接mysql又报错!Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘

    错误界面 IDEA连接mysql xff0c 地址 xff0c 用户名 xff0c 密码 xff0c 数据库名 xff0c 全都配置好了 xff0c 点测试连接 xff0c 咔 xff01 不成功 xff01 界面是这样的 xff0c 翻译
  • 《阿里云服务器搭建》------ 安装maven

    一 下载压缩包 http maven apache org download cgi 或者百度网盘链接 xff1a https pan baidu com s 1A7bkSGomTrPLtYFq3t5WzQ 提取码 xff1a nro9 二
  • 《阿里云服务器搭建》------ 安装docker

    到docker官网找到对应环境的安装方式如 xff1a https docs docker com engine install centos 1 卸载掉旧版本 yum remove docker span class token punc
  • VM中安装Centos6.8详细步骤(图文)

    目录 1 检查BIOS虚拟化支持2 新建虚拟机3 新建虚拟机向导4 创建虚拟空白光盘5 安装Linux系统对应的CentOS版6 虚拟机命名和定位磁盘位置7 处理器配置 xff0c 看自己是否是双核 多核8 设置内存为2GB9 选择IO控制
  • Ubuntu18:使用CMake-gui编译OpenCV3源码的详细过程

    目录 一 卸载原来的opencv 二 准备工作 三 编译过程 四 测试过程 由于之前安装的OpenCV4与我的代码有多处不兼容 xff0c 所以要重新装一个OpenCV3 xff0c 顺便记录一下过程吧 OpenCV版本 xff1a ope
  • 基于音形码的中文字符串相似度算法(转)

    转自 https blog csdn net chndata article details 41114771 字符串相似度算法是指通过一定的方法 xff0c 来计算两个不同字符串之间的相似程度 通常会用一个百分比来衡量字符串之间的相似程度
  • VMware15中安装Centos7详细步骤(图文)

    文章目录 1 检查虚拟化是否开启2 新建虚拟机3 新建虚拟机向导4 创建虚拟空白光盘5 安装Linux系统对应的CentOS版6 虚拟机命名和定位磁盘位置7 处理器配置 xff0c 看自己是否是双核 多核8 设置内存为2GB9 选择IO控制
  • 设置CentOS7的网卡开机自启动

    1 可以试试这条命令 xff1a CentOS7的网卡开机启动应该是 xff1a systemctl enable network 2 若设置了始终还没有开机启动网络服务 xff0c 最好只好去改配置文件 vim etc sysconfig
  • 谷粒商城 - 架构图

    商城项目地址 xff1a 后端项目源码 xff1a https gitee com StarSea007 gulimall parent 前端项目源码 xff1a https gitee com StarSea007 gulimall vu
  • 牛客网经典120道Java面试常见题(试题+答案)

    牛客网提供了120道Java面试题 xff0c 这里整理出重点的内容 xff0c 而且对答案有疑惑 xff0c 补充了解释内容 xff0c 便于理解 1 什么是Java虚拟机 xff1f 为什么Java被称作是 平台无关的编程语言 xff1
  • Redis面试题(2021最新)

    文章目录 概述什么是RedisRedis有哪些优缺点为什么要用 Redis 为什么要用缓存 为什么要用 Redis 而不用 map guava 做缓存 Redis为什么这么快 数据类型Redis有哪些数据类型Redis的应用场景 持久化什么

随机推荐

  • Java基础知识面试题(2021最新)

    文章目录 1 Java概述什么是Javajdk1 5之后的三大版本JVM JRE和JDK的关系什么是跨平台性 xff1f 原理是什么 xff1f Java语言有哪些特点什么是字节码 xff1f 采用字节码的好处是什么 什么是Java程序的主
  • vagrant up下载centos7慢的解决办法

    安装完vagrant后 执行命令 vagrant init centos 7 进行初始化 会出现一个Vagrantfile文件 然后执行 vagrant up 命令下载centos 7会很慢 将红线里的地址复制到浏览器 xff0c 通过浏览
  • SpringCloud Alibaba 全部组件说明

    文章目录 一 微服务1 系统架构的演变1 xff09 单体应用架构2 xff09 垂直应用架构3 xff09 分布式架构4 xff09 SOA架构5 xff09 微服务架构 2 微服务架构常见的问题3 常见微服务架构 二 SpringClo
  • 前后端分离项目解决跨域问题

    1 跨域概念 跨域 xff1a 指的是浏览器不能执行其他网站的脚本 它是由浏览器的同源策略造成的 xff0c 是 浏览器对javascript施加的安全限制 同源策略 xff1a 是指协议 xff0c 域名 xff0c 端口都要相同 xff
  • ElasticSearch 入门检索的语法和实例【图文】

    文章目录 简介一 基本概念1 Index 索引 2 Type 类型 3 Document 文档 4 倒排索引 二 Docker安装 Es1 下载镜像文件2 创建实例 三 初步检索1 CAT2 索引一个文档 xff08 保存 xff09 3
  • 使用VSCode对libtorch有关的代码cmake时报错:fatal error: torch/script.h: No such file or directory

    最近在Ubuntu上做用libtorch部署深度学习网络的工作 使用IDE是VSCode xff0c 并用cmake进行编译 xff0c 在写demo过程中莫名地出现了如题所示的bug卡了两天 xff0c 今天突然发现问题所在T T xff
  • ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现 xff08 若对HashMap的实现原理还不甚了解 xff0c 可参考我的另一篇文章 HashMap实现原理及源码分析 xff09 xff0c
  • 如何保障mysql和redis之间的数据一致性?

    需求起因 在高并发的业务场景下 xff0c 数据库大多数情况都是用户并发访问最薄弱的环节 所以 xff0c 就需要使用redis做一个缓冲操作 xff0c 让请求先访问到redis xff0c 而不是直接访问MySQL等数据库 这个业务场景
  • SpringCloud(九)GateWay服务网关

    文章目录 1 概述简介1 官网2 是什么3 能干嘛4 微服务架构中网关在哪里5 有Zuul了怎么有出来gateway 2 三大核心概念3 Gateway工作流程4 入门配置1 新建Module2 POM文件3 YML4 主启动类5 9527
  • SpringSecurity框架介绍

    文章目录 1 概要2 历史3 同款产品对比1 Spring Security2 Shiro 4 模块划分 1 概要 Spring 是非常流行和成功的 Java 应用开发框架 xff0c Spring Security 正是 Spring 家
  • SpringSecurity入门案例

    文章目录 1 入门案例演示1 创建一个Springboot项目2 引入相关依赖3 编写Controller进行测试4 运行项目 2 权限管理中的相关概念1 主体2 认证3 授权 3 SpringSecurity 基本原理4 UserDeta
  • SpringSecurity Web 权限方案

    文章目录 1 设置登录系统的账号 密码2 实现数据库认证来完成用户登录1 准备sql2 添加依赖3 编写实体类4 整合 MybatisPlus 制作 mapper5 编写登录实现类6 测试访问 3 自定义设置登录页面 xff0c 不需要认证
  • SpringSecurity 微服务对权限的整合

    文章目录 1 微服务认证与授权实现思路2 权限管理数据模型3 项目结构和功能说明3 核心业务1 代码结构图说明2 创建认证授权相关的工具类 xff08 1 xff09 DefaultPasswordEncoder xff1a 密码处理工具类
  • Idea配置热部署

    一 概念 热部署就是正在运行状态的应用 xff0c 修改了他的源码之后 xff0c 在不重新启动的情况下能够自动把增量内容编译并部署到服务器上 xff0c 使得修改立即生效 热部署为了解决的问题有两个 xff0c 一是在开发的时候 xff0
  • Vue CLI(脚手架)

    文章目录 一 Vue CLI21 Vue CLI使用前提 xff0c 需要安装NodeJS和Webpack2 Vue CLI的使用3 Vue CLI2详解4 Runtime Compiler和Runtime only的区别5 使用 npm
  • vue-router 详解

    文章目录 1 认识vue router2 安装和使用vue router3 路由的默认路径4 HTML5的History模式5 router link属性介绍6 路由代码跳转7 动态路由8 路由懒加载9 嵌套路由实现10 传递参数的方式11
  • LibTorch对tensor的索引/切片/掩码操作:对比PyTorch

    目录 一 通过索引获取值 二 通过索引设置值 三 掩码操作 在PyTorch C 43 43 API xff08 libtorch xff09 中对张量进行索引的方式与Python API的方式很相似 诸如None integer bool
  • 小米商城项目(springboot+thymeleaf)

    starsea mall 项目是一套电商系统 xff0c 包括 starsea mall 商城前台系统及商城后台系统 xff0c 基于 Spring Boot 2 X 及相关技术栈开发 前台商城系统包含首页登录 商品分类 新品上线 首页轮播
  • Idea解决SVN的代码冲突

    解决冲突 当B用户代码提交发生冲突后 xff0c 可以再次选择更新 xff1a 选择OK xff1a 弹窗如下 xff1a 如果选择Merge xff0c 则弹出版本差异的窗口 xff0c 让用户自行查看差异后再选择以哪个版本的修改为准 x
  • Axiso解决跨域访问

    首先请检查下你的 Vue 版本 xff0c Vue2 和 Vue3 跨域方式不同 xff1a vue V 2 X or 3 X 一 Vue2 版本 这里以访问 Ve2x 的一个公告API为例 xff0c 直接访问如下 xff1a span