hash和history路由的區別

2022-10-11 15:42:15 字數 1650 閱讀 6213

在了解路由模式前,我們先看下 什麼是單頁面應用,vue-router  的實現原理是怎樣的,這樣更容易理解路由。

單頁面應用(spa)的核心之一是:更新檢視而不重新請求頁面。

vue-router  在實現單頁面路由時,提供了兩種方式:hash  模式和  history  模式;vue2是 根據  mode  引數來決定採用哪種方式,預設是  hash  模式,手動設定為  history  模式。更新檢視但不重新請求頁面」是前端路由原理的核心之一,目前在瀏覽器環境中這一功能的實現主要有以下兩種方式

簡述路由的  hash  模式是利用了 window可以監聽onhashchange 事件來實現的,也就是說  hash  值是用來指導瀏覽器動作的,對伺服器沒有影響,http 請求中也不會包括  hash  值,同時每一次改變  hash  值,都會在瀏覽器的訪問歷史中增加乙個記錄,使用「後退」按鈕,就可以回到上乙個位置。所以,hash模式 是根據  hash 值  來發生改變,根據不同的值,渲染指定dom位置的不同資料。

參考:vue 前端路由工作原理,hash與history之間的區別

特點參考:在spa專案的路由中,注意hash與history的區別

簡述參考:深入了解前端路由 hash 與 history 差異

特點參考:在spa專案的路由中,注意hash與history的區別、前端框架路由實現的hash和history兩種模式的區別

生產環境存在問題

因為  history  模式的時候路徑會隨著  http 請求傳送給伺服器,專案打包部署時,需要後端配置 nginx,當應用通過  vue-router  跳轉到某個頁面後,因為此時是前端路由控制頁面跳轉,雖然url改變,但是頁面只是內容改變,並沒有重新請求,所以這套流程沒有任何問題。但是,如果在當前的頁面重新整理一下,此時會重新發起請求,如果  nginx  沒有匹配到當前url,就會出現404的頁面。

那為什麼hash模式不會出現這個問題呢?

上文已講,hash 雖然可以改變url,但不會被包括在  http  請求中。它被用來指導瀏覽器動作,並不影響伺服器端,因此,改變  hash  並沒有改變url,所以頁面路徑還是之前的路徑,nginx  不會攔截。

因此,切記在使用  history  模式時,需要服務端允許位址可訪問,否則就會出現404的尷尬場景。

那為什麼開發環境時就不會出現404呢?

因為在vue-cliwebpack幫我們做了處理

解決問題

生產環境 重新整理 404 的解決辦法可以在nginx做****,在 nginx 中配置按順序檢查引數中的資源是否存在,如果都沒有找到,讓  nginx  內部重定向到專案首頁。

參考:vue 了解前端路由 hash 與 history 差異

hash路由和history路由

hash模式 url後面的有乙個 後面的字串,叫hash值,也叫錨點。1 hash 值變化不會導致瀏覽器向伺服器發出請求 2 hash 改變會觸發 hashchange 事件 當hash值變化了,就會觸發事件 3 在 html5 的 history 出現前,基本都是使用 hash 來實現前端路由的 ...

關於hash路由和history路由

1.參考文件 hash模式?history模式 window.location.hash和search掐架 2.問題 3.關於兩種路由的組成 hash模式 簡單總結 除去伺服器需要使用的,能使用的僅剩下了hash,hash改變不會重新整理頁面,hash值改變會增加歷史記錄 就是會有頁面的前進後退 號...

路由的hash和history模式

為了構建 spa 單頁面應用 需要引入前端路由系統,這也就是 vue router 存在的意義。前端路由的核心,就在於 改變檢視的同時不會向後端發出請求。為了達到這種目的,瀏覽器當前提供了以下兩種支援 history 利用了 html5 history inte ce 中新增的 pushstate ...