history和hash模式的区别

36 阅读1分钟

hash模式 https://127.0.0.1/#/index.html

哈希模式中,#号后面的路径是不会传递到后端服务器的。也就是不管用户第一次输入什么,服务器都会返回index页面。(https://127.0.0.1/)默认就是返回index.html页面. 好处:不需要后端配合。 坏处:url 丑,有#号

前端使用window.addlistener('hashchange',()=>{}) 来监听事件的改变。

history模式

URL 示例:

http://example.com/home

原理:

  • 利用 HTML5 的 history.pushStatepopState API 修改 URL,不刷新页面。
  • 前端路由拦截 URL 并渲染对应组件。

优点:

  • URL 干净、漂亮。
  • 对 SEO 更友好(配合服务端渲染或者预渲染)。

缺点:

  • 需要后端配置:当用户访问网站时,直接访问 http://example.com/home 时,后端需要返回 index.html,否则会 404。(原因在 spa应用中,网站只有一个index.html 页面)。服务器根本就没有home网页
  • 部署时需要额外处理所有路径都指向前端入口。

工作方式示意:

// 切换路由
history.pushState({}, '', '/home');

// 监听浏览器前进/后退
window.addEventListener('popstate', () => {
  console.log(location.pathname); // /home