hash 和 history 區別: 外觀上:hash的路由在url中帶有#號 功能上: hash雖然在url中,但是請求不會包裹它,對後端不會產生任何影響,改變hash不會重新載入頁面。 history是利用了html5 history interface中新增的pushState()和repla ...
hash 和 history
區別:
外觀上:hash的路由在url中帶有#號
功能上:
hash雖然在url中,但是請求不會包裹它,對後端不會產生任何影響,改變hash不會重新載入頁面。
history是利用了html5 history interface中新增的pushState()和replaceState()方法。這兩個方法是應用於瀏覽器的歷史記錄棧,是以當前已有的back(),forward(),go()方法為基礎的,提供了對歷史記錄進行修改的功能。這兩個方法執行修改時,只是修改了地址欄中的url,而不會向後端發送請求,也不會觸發popstate事件。
因此,hash和history都是屬於瀏覽器自身的特性,而vue-router只是調用瀏覽器提供的介面藉助這兩個特性來實現前端的路由。
404問題:
1、在hash模式下,僅hash符號之前的內容會被包含在請求中,如 http://www.page.com,對於後端來說,即使沒有做到對路由的全覆蓋,也不會返回404錯誤;
2、在history模式下,前端的url必須和實際後端發起請求的url一致,如http://www.page.com/person/name 。如果後端缺少對/person/name 的路由處理,將返回404錯誤。
利弊:
如果是to B系統,對url要求不敏感,簡單易用,推薦 hash
to C系統,需要服務端支持的話,推薦使用history
註:在開發過程中,預設開啟的模式為hash,開啟history模式需要配置mode:'history'