在浏览器支持度上面,Hash 模式是比较强势的,甚至能兼容低版本的 IE 浏览器
唯一的缺点就是长得丑
2. history 模式
HTML5 History API 提供了一个 history.pushState 和 history.replaceState 方法(浏览器支持情况不是很乐观),它能让开发人员在不刷新网页的情况下改变站点的 URL
我们这里不去详细解释HTML5 History API
通过如下配置,就可以开启 vue-router 的 history 模式
const router = new VueRouter({
routes,
mode: 'history',
})地址栏中的地址如下
http
:
//localhost:8081/food没有了 hash ,长得确实顺眼多了
3. history 模式的问题
history 模式很好,长得很漂亮,但是漂亮的人一般都不好养
在生产环境中,history 模式有一个比较大的问题,就是当手动刷新时,会报404错误
我们来演示一遍,看下面的动图
我们复盘一下刚才的操作
① 地址栏中输入http://localhost:8080/douyin/,页面正常显示,上方导航可以看到,但是没有具体内容,因为路由规则中没有匹配 “/”
② 依次点击几个导航,都可以正常切换,点击播放进入到详情页也没有问题
③ 当地址栏中地址变成 http://localhost:8080/douyin/knowledge 时(knowledge也可以换成quadratic、food),此时手动刷新页面(在地址栏中敲击回车或者F5刷新),页面最后就报404了
④ 如果路由模式为 hash 模式,就不会出现上面的问题,大家可以自己尝试
4. 寻找原因
无论是 hash 模式,还是 history 模式,浏览器中输入如下地址
http
:
//localhost:8081/douyin浏览器一定会像服务端发送一个请求