前后端分离,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

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解