# 两种路由模式

# history模式

该模式利用h5 history pushState和replaceState API, 来完成URL跳转

1、 需要后台配置支持,当用户直接通过浏览器访问任意地址时,如果后台没有配置支持,会返回404;所以服务端需要增加一个覆盖所有情况的候选资源,比如index.html
2、 后台如上配置以后,服务器将不再返回404页面,即使你的url并不在你的路由里面;所以Vue应用中需要在匹配不到路由时,给出404
3、 不怕前进、不怕后退,但是害怕刷新,由于URL和实际向后端发起请求的URL一致,所以在没有上述的配置情况下,刷新总能出现404

# hash模式(默认)

该模式利用window.onhashchange,可以在window对象上监听该事件,进而利用history pushState和replaceState API进行路由切换

URL表现为/#/hello, hash即#/hello,hash虽然出现在URL中,但不会被包括在HTTP请求中,仅hash符号前的内容会被包含在请求中,对后端没有任何影响

1、 url改变时,页面不会重新加载
2、 url较丑

# 其他对比

在history.pushState() API上,history模式比hash模式更具优势

1、history可以设置同源的任意URL,而hash只能设置同文档
2、history可以添加相同的url到记录中,而hash只能添加不同的url
3、history可以添加任意类型数据到记录中,而hash只能添加短字符串
4、history可以设置额外title