前端路由模式hash和history

Posted funny-code123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端路由模式hash和history相关的知识,希望对你有一定的参考价值。

  1. hash模式
    hash模式的原理是依据window对象的onhashchange事件进行监听,它的特点是:虽然hash路径出现在URL中,但是不会出现在HTTP请求中,对后端完全没有影响,因此改变hash值不会重新加载页面。
    window.onhashchange = function(e){
          console.log(e);
    }

    打印出来的结果
    技术分享图片
    可以通过location.hash获得浏览器url路径中的#部分内容,上图是#bvc,
    如果想获取#后面的内容可通过location.hash.slice(1),上图是bvc

  2. history模式
    利用了html5 History Interface中新增的pushState()replaceState()方法,这两个方法应用于浏览器的历史记录栈,在当前已有的back、forward、go的基础上,他们提供了对当前浏览器进行修改的功能,只是当它们被修改时,虽然浏览器的URL发生
    了变化,但是不会立即向后端服务器发送请求,但是如果点击刷新,就会重新向后端服务器发送请求。
  3. 使用场景
    一般情况下,vue-router前端路由模式使用history和hash都可以,在美观上history比hash美观些,因为hash有自己的特定符号#
    相比于hash,history具有以下优势:
    *pushState()设置新的URL可以是任意与当前URL同源的URL,而hash只能改变#后面的内容,因此只能设置与当前URL同文档的URL
    *pushState()设置的URL与当前URL一模一样时也会被添加到历史记录栈中,而hash模式中,#后面的内容必须被修改才会被添加到新的记录栈中
    *pushState()可以通过stateObject参数添加任意类型的数据到记录中,而hash只能添加短字符串
    *pushState()可额外设置title属性供后续使用
    但是通过URL向后端发起HTTP请求的时候,history,hash具有以下区别
    *hash模式下,只有#符号之前的内容才会包含在请求中被发送到后端,也就是说虽然后端没有对路由全覆盖,但是不会返回404错误
    *history模式下,前端的URL必须和向发送请求后端URL保持一致,否则会报404错误
















以上是关于前端路由模式hash和history的主要内容,如果未能解决你的问题,请参考以下文章

浅谈前端路由原理hash和history

浅谈前端路由原理hash和history

Vue-两种路由模式 hash 和 history

哈希路由(hash模式)和历史路由(history模式)的区别

hash和history 的区别仅仅是#吗?

vue-前端路由和后端路由