hash路由和history路由的区别

目录

1.原理不同。

2.表现不同。

3.history模式特点

总结


单页应用是在移动互联时代诞生的,它的目标是不刷新浏览器,而通过感知地址栏中的变化来决定内容区域显示什么内容。要达成这个目标,我们要用到前端路由技术,具体来说有两种方式来实现:hash模式和history模式。

不同之处有三点。

1.原理不同。

hash模式的实现原理是通过监听hashChange事件来实现的。history模式是通过调用 history.pushState方法(或者replaceState) 并且 监听popstate事件来实现的。history.pushState会追加历史记录,并更换地址栏地址信息,但是页面不会刷新,需要手动调用地址变化之后的处理函数,并在处理函数内部决定跳转逻辑;监听popstate事件是为了响应浏览器的前进后退功能。

2.表现不同。

hash模式会在地址栏中有#号,而history模式没有;同时由于history模式的实现原理用到H5的新特性,所以它对浏览器的兼容性有要求(IE >= 10)。

3.history模式特点

history模式开发的SPA项目,需要服务器端做额外的配置,否则会出现刷新白屏(链接分享失效)。原因是页面刷新时,浏览器会向服务器真的发出对这个地址的请求,而这个文件资源又不存在,所以就报404。处理方式就由后端做一个保底映射:所有的请求全部拦截到index.html上。

总结

单页应用是在移动互联时代诞生的,它的目标是不刷新整体页面,通过地址栏中的变化来决定内容区域显示什么内容。要达成这个目标,我们要用到前端路由技术,具体来说有两种方式来实现:hash模式和history模式。hash模式是通过监听hashChange事件来实现的,history模式是通过pushState方法+popstate事件来实现的。

Vue中的路由可以分为基于`hash`的路由基于`history`的路由,它们的主要区别在于如何处理URL以及浏览器的历史记录。 ### 基于hash路由 #### 工作原理: 1. **URL变动**:当用户访问带有路由路径的页面时,URL看起来像是 `http://yourwebsite.com/#/path/to/page` 的形式。这里的`#`后的部分是hash值,而不是真正的HTTP请求路径的一部分。 2. **与服务器无关**:这种模式不需要改变服务器配置即可添加路由功能,因为hash值只是客户端内部用于区分不同页面状态的一个标记,并不会触发服务器的HTTP请求。 3. **兼容性**:几乎所有现代浏览器都支持hashchange事件,因此基于hash路由在大多数设备上都能正常工作,包括老版本的IE。 4. **历史记录**:浏览器的前进、后退按钮通常不会影响到hash值的修改,这意味着每一次导航都不会创建新的历史条目。 5. **链接书签**:通过hash值生成的链接容易被复制并粘贴到邮件或其他应用中,因为浏览器默认会忽略`#`及之后的部分。 ### 基于history路由 #### 工作原理: 1. **URL变动**:与基于hash路由相反,基于history路由在实际URL中改变了路径,看起来更像是正常的HTTP请求路径,如 `http://yourwebsite.com/path/to/page`。这需要通过特定API(例如HTML5 History API)进行操作。 2. **与服务器有关**:为了让基于history路由正常工作,需要在服务器端进行配置,允许动态更改URL。例如,通过设置服务器的响应头(如`RewriteEngine On`),让服务器能够理解当前路径并返回相应的资源。 3. **浏览器历史**:每当你导航到一个新的页面时,浏览器的历史记录会自动更新,包含最近访问过的页面。这对于用户体验来说是一个加分项,因为它利用了浏览器原有的导航功能。 4. **链接书签**:链接书签使用的是实际的URL路径,而不是hash值。这使得外部共享链接更直接地指向内容所在的位置。 ### 实现方式差异 - **安装配置**:对于基于hash路由(如Vue Router默认提供的方式),只需按照官方指南初始化Vue Router即可。而基于history路由则通常涉及额外的配置步骤,如引入并配置`history`模式。 - **性能**:由于涉及到与服务器的交互,基于history路由通常在初次加载时可能需要额外时间来完成页面的跳转。 ### 使用场景差异 - **安全性敏感应用**:基于history路由更适合安全性隐私敏感的应用,因为它不使用易受攻击的hash机制。 - **移动应用开发**:对于原生移动应用而言,基于history路由可能是首选方案,因为它更好地利用了平台的原生特性。 总的来说,选择哪种类型的路由依赖于项目的需求、目标平台、对性能的要求以及是否需要考虑SEO等其他因素。了解两者之间的差异可以帮助开发者做出最合适的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YD小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值