hash和history路由的區別


hash模式
hash就是指url尾巴后的#號以及后面的字符。這里的#和css里的#是一個意思。
hash也稱作錨點,本身是用來做頁面定位的,他可以使對應的id元素顯示在可視區域內。 由於hash值變化不會導致瀏覽器向服務器發出請求,而且hash改變會觸發hashchange事件,
瀏覽器的進后退也能對其進行控制,所以人們在html5的history出現前,基本都是使用hash來實現前端路由的。
他的特點在於:hash雖然出現url中,但不會被包含在HTTP請求中,對后端完全沒有影響,因此改變hash不會重新加載頁面。
hash 本來是拿來做頁面定位的,如果拿來做路由的話,原來的錨點功能就不能用了。


window.addEventListener('hashchange',function(){ //監聽hash變化,點擊瀏覽器的前進后退會觸發 })
 
history模式

利用了 HTML5 History 中新增的 pushState() 和 replaceState() 方法。(需要特定瀏覽器支持)
這兩個方法應用於瀏覽器的歷史記錄棧,在當前已有的 back、forward、go 的基礎之上,它們提供了對歷史記錄進行修改的功能。
只是當它們執行修改時,雖然改變了當前的 URL,但瀏覽器不會立即向后端發送請求。 因此可以說,hash 模式和 history 模式都屬於瀏覽器自身的特性,

window.addEventListener('popstate',function(){ //監聽history變化,點擊瀏覽器的前進后退會觸發 })
區別
hash模式下,僅hash符號之前的內容會被包含在請求中,如 http://www.11.com 因此對於后端來說,即使沒有做到對路由的全覆蓋,也不會返回404錯誤; history模式下,前端的url必須和實際后端發起請求的url一致,如http://www.222.com/aa/ 。如果后端缺少對/aa/ 的路由處理,將返回404錯誤。此時需要在后端作出相應的調整

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM