history和hash都是利用瀏覽器的兩種特性實(shí)現(xiàn)前端路由,history是利用瀏覽歷史記錄棧的API實(shí)現(xiàn),hash是監(jiān)聽(tīng)location對(duì)象hash值變化事件來(lái)實(shí)現(xiàn),具體區(qū)別如下:
1.hash路由在地址欄URL上有#,用 window.location.hash 讀取。而history路由沒(méi)有會(huì)好看一點(diǎn)
2.我們進(jìn)行回車(chē)刷新操作,hash路由會(huì)加載到地址欄對(duì)應(yīng)的頁(yè)面,而history路由一般就404報(bào)錯(cuò)了(刷新是網(wǎng)絡(luò)請(qǐng)求,沒(méi)有后端準(zhǔn)備時(shí)會(huì)報(bào)錯(cuò))。
3.hash路由支持低版本的瀏覽器,而history路由是HTML5新增的API。
4.hash的特點(diǎn)在于它雖然出現(xiàn)在了URL中,但是不包括在http請(qǐng)求中,所以對(duì)于后端是沒(méi)有一點(diǎn)影響的,所以改變hash不會(huì)重新加載頁(yè)面,所以這也是單頁(yè)面應(yīng)用的必備。
5.history運(yùn)用了瀏覽器的歷史記錄棧,之前有back,forward,go方法,之后在HTML5中新增了pushState()和replaceState()方法,它們提供了對(duì)歷史記錄進(jìn)行修改的功能,不過(guò)在進(jìn)行修改時(shí),雖然改變了當(dāng)前的URL,但是瀏覽器不會(huì)馬上向后端發(fā)送請(qǐng)求。
6.history的這種模式需要后臺(tái)配置支持。比如:當(dāng)我們進(jìn)行項(xiàng)目的主頁(yè)的時(shí)候,一切正常,可以訪問(wèn),但是當(dāng)我們刷新頁(yè)面或者直接訪問(wèn)路徑的時(shí)候就會(huì)返回404。
以上就是關(guān)于history、hash的區(qū)別介紹的內(nèi)容。