咱們知道對於單頁應用來說,理想的使用場景是僅在進入應用時加載index.html,後續在的網絡操做經過Ajax完成,不會根據URL從新請求頁面,可是不免遇到特殊狀況,好比用戶直接在地址欄中輸入並回車,瀏覽器重啓從新加載應用等。html
hash模式僅改變hash部分的內容,而hash部分是不會包含在HTTP請求中的: http://test.com/#/user/id // 如從新請求只會發送http://test.com/ 故在hash模式下遇到根據URL請求頁面的狀況不會有問題。後端
history模式則會將URL修改得就和正常請求後端的URL同樣,在此狀況下從新向後端發送請求,如後端沒有配置對應/user/id的路由處理,則會返回404錯誤。官方推薦的解決辦法是在服務端增長一個覆蓋全部狀況的候選資源:若是 URL 匹配不到任何靜態資源,則應該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。同時這麼作之後,服務器就再也不返回 404 錯誤頁面,由於對於全部路徑都會返回 index.html 文件。爲了不這種狀況,在 Vue 應用裏面覆蓋全部的路由狀況,而後在給出一個 404 頁面。或者,若是是用 Node.js 做後臺,可使用服務端的路由來匹配 URL,當沒有匹配到路由的時候返回 404,從而實現 fallback。瀏覽器