hash和history路由的区别

news/2024/11/17 18:40:20/

单页面应用

  • SPA
  • 一个项目中只有一个html页面,它在第一次加载页面时,将唯一完成的html页面和所有其余页面组件一起下载下来。
  • 切换页面时,不会重新加载整个页面,而是通过路由来实现不同组件之间的切换。

Vue Router

  • vue-router在实现单页面路由时,提供了两种方式:hash模式和history模式。

Hash

  • vue-router默认为hash模式,利用了window可以监听onhashchange事件来实现。
  • ”#“ 符号本身以及它后面的字符称之为 hash,可通过 window.location.hash 属性读取。
  • “#”后面的hash值是用来指导浏览器动作的,对服务器没有影响。
  • 每一次改变hash值,都会在浏览器的访问历史中增加一个记录,使用“back”按钮,就可以回到上一个位置。
  • hash 不利于 SEO(搜索引擎优化)。

History

  • history模式是通过调用window.history对象上的一系列方法来实现页面的无刷新跳转。

  • 路径直接拼接在端口号后面,后面的路径会随着http请求发给服务器。

  • 利用HTML5 History Interface中新增的 pushState() 和 replaceState() 方法来实现无刷新跳转的功能。

  • 这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。

  • 由于History API的缘故,低版本浏览器有兼容性问题。

  • 生产环境下,如果在当前的页面刷新一下,此时会重新发起请求,如果后端配置的 nginx 没有匹配到当前url,就会出现404的页面。
    eg:当我们把 history 项目部署到服务器中后,此时我们在浏览器输入一个网址(比如是 www.test.com ), 此时会经过 dns 解析,拿到 ip 地址后根据 ip 地址向该服务器发起请求,服务器接受到请求后,然后返回相应的结果(html,css,js)。如果我们在前端设置了重定向,此时页面会进行跳转到 www.test.com/home ,在前端会进行匹配对应的组件然后将其渲染到页面上。此时如果我们刷新页面的话,浏览器会发送新的请求 www.test.com/home, 如果后端服务器没有 /home 对应的接口,那么就会返回404。

  • 解决办法:可以在 nginx 做代理转发,配置按顺序检查参数中的资源是否存在,如果没有找到,让 nginx 内部重定向到项目首页。

对比

hashhistory
有 # 号没有 # 号
能够兼容到IE8只能兼容到IE10
实际的url之前使用哈希字符,这部分url不会发送到服务器,不需要在服务器层面上进行任何处理每访问一个页面都需要服务器进行路由匹配生成 html 文件再发送响应给浏览器,消耗服务器大量资源
刷新不会存在 404 问题浏览器直接访问嵌套路由时,会报 404 问题。
不需要服务器任何配置需要在服务器配置一个回调路由

小结

  • hash 路由兼容性好,但是带”#“显得丑些, histroy 和正常 url 路径一样,但是需要在服务器进行单独配置。

参考:
https://juejin.cn/post/7096034733649297421
https://juejin.cn/post/7037282729485959204


http://www.ppmy.cn/news/932906.html

相关文章

ComboBox基本用法

作用:是一个下拉框,用于以下拉列表的方式展示数据。 常用属性: 常用事件: 下拉列表框内容选择变化时触发 后台代码示范: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){//获取被选中的…

开好网店的八个方法

开网店是趋势,越来越多的人加入了这个行列,开网店容易,因为现在已经有很多购物平台,比如淘宝,只要注册轻轻松松就可以拥有一家网店,那么接下来该如何做呢?如何开好网店? 如何做大网店…

用户账号被盗,京东回应:都怪QQ!库克:从来没获取过FB用户数据!

【数据猿导读】京东回应:是用户关联QQ号所致;库克:苹果没收集过FB用户数据,也没提出获取数据的要求,更是从来没有做过数据生意 官网 | www.datayuan.cn 微信公众号ID | datayuancn 一、京东用户账号被盗,官…

如何使用自动化构造随机路由模型

为什么要仿真随机路由? 路由器测试中,为了最大程度还原现网路由情况,评估路由器在现网环境下稳定工作各项指标,需要对导入路由进行离散仿真,目前路由仿真可分为导入路由与生成路由两种方式,导入路由需要现…

欧姆龙cp11以太网设置

捷米特JM-ETH-CP转以太网模块控,用于欧姆龙 CP1L/ CP1E/ CP1H 系列 PLC 的以太网数据采集,非常方便构建生产管理系统。 支持 FINS/UDP、FINS/TCP 以太网协议通信,支持上位机软件(组态王、MCGS、力控、KepWare OPC 服务器等&#…

Android 全局字体设置 例如楷体

1、在res下新建资源文件目录font&#xff0c;把字体文件拷贝到font文件夹中 2、在AndroidManifest.xml中的application节点下&#xff0c;设置全局style&#xff0c;引入字体文件 <item name"android:fontFamily">font/pingfang_sc_regular</item>或者

楷书书法规则_《楷书之美》3分钟教会你如何欣赏楷书,明白楷书的基本规律!...

所谓“台上一分钟&#xff0c;台下十年功”这说的是戏曲表演&#xff0c;也就是说需要很扎实的基本功。而对于书法而言&#xff0c;欲要学习好书法必须要先写好楷书。为什么写书法&#xff0c;必须先写好楷书呢&#xff1f;这就好比人&#xff0c;是先学会走路&#xff0c;然后…

端午节书法作品楷书内容_端午节书法作品楷书四字柳体

柳体是一种楷书书法字体。影响非常的大。柳公权的字体在楷书书法界有着很高的地位。被称为柳体。下面是小编为你整理的柳体楷书书法作品&#xff0c;希望对你有用!柳体楷书书法作品欣赏柳体楷书书法作品图片1柳体楷书书法作品图片2柳体楷书书法作品图片3柳体楷书书法作品图片4柳…