Leon's blog Leon's blog
首页
前端
场景
技术
更多
关于
收藏
索引
GitHub (opens new window)

Leon Yu

做一个有个性的开发者~
首页
前端
场景
技术
更多
关于
收藏
索引
GitHub (opens new window)
  • 场景
  • ResizeObserver防抖优化性能
  • useAbortableRequest
  • requestAnimation与滚动
  • 支持promise的并发
  • 单点登录场景与理解
  • 前端路由
    • 问题记录
    • 后端路由
    • 前端路由
      • Hash 模式路由
      • History模式路由
    • 解决路由问题
    • 参考文章
  • 场景
leon yu
2024-08-18
目录

前端路由

# 问题记录

笔记

在部署网页到github-pages上时,发现我的网页只有根路由可以直接通过url访问,而其他路由不行,只能通过将history路由更改为hash路由才能正常访问

因此,我发现自己在路由方面的知识还有所不足,特意写下此篇作为记录。

# 后端路由

在 web 开发早期,一直是后端路由占据主要地位,每次用户发出请求,URL就会发生变化,后端收到请求之后就会根据路由渲染对应的页面,将页面返回到本地。

# 前端路由

提示

前端路由是单页面应用兴起之后才开始出现的。

# Hash 模式路由

早起的前端路由实现就是基于location.hash来实现的,location.hash就是路由#后面的内容,其原理就是通过hashchange监听#后面的内容的变化来进行页面更新。hash模式是利用浏览器不会对#后面的路径对服务端发起请求。

使用hash模式有两个特点:

  • 改变hash值,浏览器不会重新加载页面
  • 当刷新页面时,hash不会传给服务器
  • 也就是说http://localhost/#a与http://localhost/这两个路由其实都是去请求http://localhost这个页面的内容,至于为什么它们可以渲染出不同的页面,这个是前端自己来判断的,不需要后端配置。

优点:

  • 可以兼容低版本浏览器,支持IE8
  • 只有#之前的内容才会作为URL发送给服务器,就算服务端没有对路由进行全覆盖也不会返回404
  • hash改变都会在浏览器访问的历史记录中增加一个记录,所以可以通过浏览器进行前进后退,如果想在hash模式下不保存记录,可以使用location.replace

# History模式路由

history是基于HTML5新增的pushState和replaceState两个API以及浏览器的popState事件监听历史栈的改变,只要历史栈有信息发生改变,就会触发该事件。这种模式同样也是不会向后端发起请求的。

优点:

  • 该模式的路由不带#,看起来更美观
  • pushState设置的URL可以是任意的与当前URL同源的URL,而hash只能改变#后面的内容

缺点:

  • IE9及其以下版本浏览器不支持,IE10开始支持

vue-router会检测浏览器版本,当无法启用history模式时会自动降级为hash模式

# 解决路由问题

  • 将 basename 加入到路由定义中
  • 加入 404 页面进行重定向
  • index.html 配合解析路径,replaceState到对应的路由

# 参考文章

上集 (opens new window) 下集 (opens new window)

最近更新~: 2024/08/19, 01:05:55
单点登录场景与理解

← 单点登录场景与理解

最近更新
01
应用层
01-11
02
计算机网络和因特网
12-22
03
关于
12-22
更多文章>
Theme by Vdoing | Copyright © 2024-2025 主题来自 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式