基础知识
hash 模式
- hash:在前端领域中,将 # 称为哈希符或者锚点,位于 # 的值则被称为哈希值。
- 原理:
onhashchange
事件。 - 特点:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。通过
onhashchange
监听哈希值的变化,前端即使并没有发起http请求他也能够找到对应页面的代码块进行按需加载,做出响应。
history 模式
- history:使用 history api 对浏览器历史记录栈进行操作。
- 原理:H5 新增的
pushState()
和replaceState()
方法 - 特点:
pushState()
和replaceState()
方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。
hash 模式与 history 模式区别
hash | history | |
---|---|---|
浏览器支持 | 基本支持所有浏览器 | 支持 HTML5 API 的浏览器 |
URL 显示 | 永远带有 # 号,不符合现阶段 URL 规范 | 符合现阶段 URL 规范 |
界面后退 |
onhashchange 事件处理跳转 |
history.back() |
界面前进 |
onhashchange 事件处理跳转 |
hsitory.forward() |
界面刷新 | 支持 | 二级界面会出现 404 错误 |
hash 模式缺点
- URL 带有 # 号,不符合 URL 的规范(看起来也很丑)
- 有的app里面url是不允许带有#号,如果使用 hash 模式将会引起错误
history 模式缺点
- 只有支持 H5 API 的浏览器才支持该模式
- 界面刷新会引起 404 错误
原因:pushState()
和replaceState()
是将url替换并且不刷新页面,由于http 并没有去请求服务器该路径下的资源,当刷新时,如果服务器中没有相应的响应或者资源,就会显示404。
解决方式:后台进行相应的配置,建议查看官方文档