Hash 模式和 History 模式是前端路由中常用的两种模式,它们在 URL 的形式和处理方式上存在一些区别。
-
URL 形式:
- Hash 模式:在 URL 中使用
#
符号来表示路由的路径。例如,http://example.com/#/home
。 - History 模式:在 URL 中使用真实的路径,不需要
#
符号。例如,http://example.com/home
。
- Hash 模式:在 URL 中使用
-
兼容性:
- Hash 模式:支持所有现代浏览器和较旧的浏览器,包括不支持 HTML5 History API 的浏览器。
- History 模式:需要浏览器支持 HTML5 History API,因此较旧的浏览器可能不支持。
-
服务器配置:
- Hash 模式:不需要特殊的服务器配置。因为
#
符号后面的内容不会发送到服务器,所以服务器只需返回主页面即可。 - History 模式:需要服务器配置来确保在直接访问子路由时返回正确的页面。服务器需要配置一个 fallback 选项,以便在找不到具体的路由时返回主页面。
- Hash 模式:不需要特殊的服务器配置。因为
-
美观性:
- Hash 模式:由于
#
符号的存在,URL 可能看起来比较杂乱,不够美观。 - History 模式:URL 可以更加干净和直观,没有额外的
#
符号。
- Hash 模式:由于
-
导航操作:
- Hash 模式:在切换路由时,会触发浏览器的 hashchange 事件,可以通过监听该事件来响应路由的变化。
- History 模式:通过 History API 可以动态地修改 URL,并且在切换路由时不会触发特定的事件,需要使用编程式的导航方式。