前后端分离,Vue-Router使用history路由模式,页面刷新报401错误

本文主要是介绍前后端分离,Vue-Router使用history路由模式,页面刷新报401错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

路由跳转和请求响应都正常,但是一刷新页面,就出现该401错误,查看vue前端项目,路由使用的是history模式。

vue路由有两种模式:hash和history,两者的区别主要为:

  1. 路由格式上。hash模式通过#将路由分开,history模式没有;
  2. 服务访问。hash模式不需要服务器配置,可以直接访问,且不会报错;在Vue中使用history模式路由时,‌当页面刷新后,‌‌浏览器会向服务器发送请求以获取对应URL的资源‌。‌这是因为history模式利用了HTML5 History API来实现页面的无刷新跳转,‌使得URL看起来更加美观,‌更接近传统的URL路径。‌然而,‌这也意味着当用户在浏览器直接访问或刷新某个URL时,‌服务器需要能够正确处理这个请求,‌返回对应的页面内容。‌因此,‌在使用history模式时,‌需要对服务器进行配置,‌以便在URL匹配不到任何静态资源时,‌返回同一个index.html页面,‌这个页面是Vue应用依赖的入口页面‌。

查看vue.config.js文件中代理配置:

proxy: {'^/api': {target: process.env.VUE_APP_BASE_API,changeOrigin: true,pathRewrite: {['^' + '/api']: ''}},'^/ops': {target: process.env.VUE_APP_OPS_API,changeOrigin: true,pathRewrite: {['^' + '/ops']: ''}}}

可看出对于^/ops'开头的请求路径会被重写,所以刷新页面后浏览器向服务器发送的路由请求https://localhost:9528/ops/logManage路径被重写后的URL匹配不到index.html页面,故返回401错误,所以将页面的路由地址/ops/logManage改成/manageOps/logManage或其他不会被代理配置匹配重写的路径就好了(或者去修改接口请求url地址和代理配置)。

当浏览器加载或刷新页面时,向本地开发环境的 Vue 服务发送 document 、xhr等请求,发送的请求会经历如下步骤:

一、到达开发服务器

  • 开发服务器: Vue CLI 开发服务器(通常是 webpack-dev-server)接收到这个请求。开发服务器在 vue.config.js 的 devServer 配置中定义。

二、 请求匹配

        1.匹配代理::开发服务器根据 devServer.proxy 配置中的规则匹配请求路径。如果请求路径与配置中的规则相符,则会触发代理处理。

        2. 路径重写:在代理配置中,pathRewrite 用于重写请求路径。开发服务器会根据 pathRewrite 的规则修改请求的路径。例如,如果原始请求是 /api/index,并且配置了 pathRewrite 将 /api 重写为 /,则请求路径将变成 /index。

  module.exports = {
    devServer: {
      proxy: {
        '/api': {
          target: 'http://localhost:3000',
          pathRewrite: { '^/api': '' },
        },
      },
    },
  };

        3. 代理转发请求: 重写后的请求路径会被转发到 target 指定的目标服务器。在上面的例子中,请求会被转发到 http://localhost:3000/index。

        4. 目标服务器处理和响应: 目标服务器处理重写后的请求路径,并返回相应的响应内容。

        5. 响应返回:开发服务器将目标服务器的响应返回给浏览器。浏览器接收到响应后,会继续加载和渲染页面。

三、处理未被匹配的请求(Document 请求)

        1. 开发服务器处理(publicPath: '/': 设置为 '/' 确保了应用资源的路径相对于根路径。它确保在开发模式下,构建的应用能够正确引用资源。):

                a1.开发服务器配置: Vue CLI 使用 webpack-dev-server 作为开发服务器。这个服务器能够处理各种请求,并根据配置返回适当的文件。
                a2.路径解析: 在开发模式下,publicPath 为 '/' 说明所有的资源路径都是相对于根路径的。即使你访问的是 /about,publicPath 的设置确保了静态资源的路径都是相对根路径 /。
                a3.主 HTML 文件: 开发服务器会根据请求路径返回主 HTML 文件(index.html),这通常是 Vue 应用的入口文件。对于所有非静态资源的请求(比如 / 或 /about),开发服务器默认会返回 index.html,这是因为 Vue 的前端路由通常是在客户端处理的。

        2. SPA 路由处理

                b1.前端路由: 在 Vue 的 SPA(单页面应用)中,前端路由由 Vue Router 处理。当用户请求的路径(例如 /about)与服务器上的静态资源不匹配时,开发服务器会返回 index.html,并由 Vue Router 进行客户端路由处理。

这篇关于前后端分离,Vue-Router使用history路由模式,页面刷新报401错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092400

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash