當切換 URL 時,Vue Router 會避免對 Server 發出 Request ,直接由 JavaScript 去 render HTML,在 HTML 5 之前會使用 Hash Mode,現在會使用 HTML 5 Mode。
Version
Vue 3.4
Vue Router 4.2
Hash Mode
https://my-website/#
https://my-website/#/posts
https://my-website/#/posts/1
- Hash Mode 的 url 在 root route 之後都會加上
#
- 原本
#
是用在同一個 page 跳轉,並不會送到 server,Vue Router 用此特性將#
加以攔截,由 JavaSript 去 render HTML,瀏覽器只會將#
之前往 server 送
HTML 5 Mode
https://my-website/
https://my-website/posts
https://my-website/posts/1
- HTML 5 Mode 的 url 在 root route 之後不必加上
#
,如同 MPA 一樣 - HTML 5 Mode 使用 HTML 5 的 History API 實作,可攔截 root route 之後的 url 不送到 server,但只適用支援 HTML 5 的瀏覽器
優缺點比較
- URL 可讀性
- Hash Mode:必須在 url 加上
#
比較奇特 - HTML 5 Mode:如同 MPA 的 url 一樣
- Hash Mode:必須在 url 加上
- 404
- Hash Mode:瀏覽器認識
#
,儘管重整也是刷新index.html
而已, 不會有404
錯誤 - HTML 5 Mode:重整後瀏覽器會對 server 發出 request,造成
404
錯誤,必須為 Web Server 動手腳,若404
時回傳index.html
- Hash Mode:瀏覽器認識
Nginx
nginx.conf
location / {
try_files $uri $uri/ /index.html;
}
- 若找不到指定的 url,則回傳
index.html
Conclusion
- 也有文件稱 HTML 5 Mode 為 History Mode,因為使用了 HTML 5 的 History Api
- 由於各瀏覽器都已經支援 HTML 5,目前都是使用 HTML 5 Mode