Vue Router 路由hash和history模式


在 Vue 中,路由的两种主要模式是 hashhistory,默认的路由模式是hash模式。。这两种模式决定了 URL 的外观以及浏览器如何处理 URL 的变化。


hash和history模式区别

特性 Hash 模式 History 模式
URL 表现形式 URL 中带有 # 符号,如 http://example.com/#/about URL 看起来更干净,没有 # 符号,如 http://example.com/about
服务器配置 不需要特殊的服务器配置 需要服务器配置以支持客户端路由,返回 index.html
兼容性 所有现代浏览器都支持 大多数现代浏览器都支持,但在一些较旧的浏览器或特殊环境中可能不支持
美观度 URL 中带有 # 符号可能看起来不太美观 URL 看起来更干净,没有额外的符号
SEO # 后面的内容不会被搜索引擎视为页面的一部分 与常规页面一样,可以被搜索引擎索引
书签 书签中的 URL 会包含 # 符号 书签中的 URL 更简洁
刷新页面 刷新页面时,通常能够保持当前路由状态 如果没有正确的服务器配置,刷新页面可能会返回 404 错误
浏览器前进/后退按钮 正常工作 正常工作
配置方式 Vue Router 默认使用 Hash 模式 需要在创建 Vue Router 实例时明确指定 mode: 'history'

Hash 模式

hash值会出现在URL里面,但是不会出现在HTTP请求中,对后端完全没有影响。所以改变hash值,不会重新加载页面。这种模式的浏览器支持度很好,低版本的IE浏览器也支持这种模式。hash路由被称为是前端路由,已经成为SPA(单页面应用)的标配。

特点:

  • URL 中会带有一个 # 号,例如 http://example.com/#/home
  • 浏览器不会将带有 # 及其后面的部分发送到服务器请求资源
  • 仅改变 # 后面的部分,不会重新加载页面
  • 兼容性较好,所有现代浏览器都支持

切换到hash模式:

  • Vue2.x中:

    const router = new VueRouter({
      mode: 'hash',
      routes
    })
    
  • Vue3.x中:

    const router = createRouter({
        history: createWebHashHistory(),
        routes
    });
    

hash模式的主要原理就是onhashchange()事件:

window.onhashchange = function(event){
	console.log(event.oldURL, event.newURL);
	let hash = location.hash.slice(1);
}

使用onhashchange()事件的好处就是,在页面的hash值发生变化时,无需向后端发起请求,window就可以监听事件的改变,并按规则加载相应的代码。

除此之外,hash值变化对应的URL都会被浏览器记录下来,这样浏览器就能实现页面的前进和后退。虽然是没有请求后端服务器,但是页面的hash值和对应的URL关联起来了。


History 模式

history模式的URL中没有#,它使用的是传统的路由分发模式,即用户在输入一个URL时,服务器会接收这个请求,并解析这个URL,然后做出相应的逻辑处理。

虽然history模式丢弃了丑陋的#。但是,它也有自己的缺点,就是在刷新页面的时候,如果没有相应的路由或资源,就会刷出404来。

特点:

  • URL 看起来更加“干净”,没有 # 号,例如 http://example.com/home
  • 浏览器会将 URL 的变化当作一个普通的页面跳转,可能会向后端服务器发起请求
  • 需要后端进行配置,以便对所有路由都返回同一个页面(通常是 index.html),否则就会404
  • 兼容性相对较差,IE9 以下不支持

切换到history模式:

  • Vue2.x中:

    const router = new VueRouter({
      mode: 'history',
      routes: [...]
    })
    
  • Vue3.x中:

    const router = createRouter({
        history: createWebHistory(),
        routes
    });
    

后端配置:

当使用 history 模式时,需要确保后端服务器对所有路由都返回同一个页面(通常是 index.html)。
以下是一个 Nginx 的配置示例:

location / {  
  try_files $uri $uri/ /index.html;  
}

这个配置告诉 Nginx,如果请求的文件或目录不存在($uri 和 $uri/ 都不匹配),就返回 index.html。
这样,无论用户访问哪个 URL,都会返回 Vue 应用的入口文件,然后由 Vue Router 接管后续的路由处理。

相关推荐

  1. vue3 hashhistory模式配置

    2024-05-09 08:28:03       37 阅读
  2. hashhistory模式的区别

    2024-05-09 08:28:03       36 阅读
  3. Vue Router hashhistory模式

    2024-05-09 08:28:03       34 阅读
  4. hashhistory模式的区别

    2024-05-09 08:28:03       33 阅读
  5. hash history 的区别

    2024-05-09 08:28:03       55 阅读
  6. Vue的实现:hash模式 history模式原理

    2024-05-09 08:28:03       55 阅读
  7. Vue2面试题:说一下模式hashhistory的区别?

    2024-05-09 08:28:03       52 阅读
  8. Vue hashhistory两种的区别

    2024-05-09 08:28:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-09 08:28:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-09 08:28:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-09 08:28:03       82 阅读
  4. Python语言-面向对象

    2024-05-09 08:28:03       91 阅读

热门阅读

  1. 机器学习笔记03

    2024-05-09 08:28:03       33 阅读
  2. Unrecognized function or variable ‘datachk‘. Matlab debug

    2024-05-09 08:28:03       28 阅读
  3. matlab实现四种数值积分法运算

    2024-05-09 08:28:03       34 阅读
  4. Oracle中blob和clob的区别和例子

    2024-05-09 08:28:03       35 阅读
  5. 加盟零食店的真是大冤种

    2024-05-09 08:28:03       30 阅读
  6. Debian常用命令

    2024-05-09 08:28:03       39 阅读
  7. TensorFlow 的基本概念和使用场景

    2024-05-09 08:28:03       32 阅读
  8. 20240508金融读报:风控分析拟人化&国际信贷创新

    2024-05-09 08:28:03       32 阅读
  9. C++中的特殊类设计看完秒懂!

    2024-05-09 08:28:03       34 阅读
  10. Kubernetes(k8s)的认证(Authentication)策略解析

    2024-05-09 08:28:03       36 阅读