1、hash模式
在浏览器url中符号#以及#后面的字符称之为hash,可用window.location.hash读取
特点:hash虽然在URL中,但不被包括在HTTP请求中;主要是用来指导浏览器动作的,对服务端完全没有影响,因此改变hash不会重加载页面。
hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 www.xxx.com ,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。
2、history模式
利用了HTML5 History interface中新增的pushState()和replaceState()方法(需特定浏览器支持)
这两个方法应用于浏览器的历史记录栈,在当前已有的back、forword、go的基础上,提供了对历史记录进行修改的功能。当它们执行修改时,虽然改变了当前的URL,但浏览器不会立即向后端发送请求。
history模式的问题:不怕前进、不怕后退,就怕刷新
在hash模式下,前端路由修改的是#中的信息,而浏览器请求是不会将#后面的数据发送到后台,所以没有问题。但在history下,我们可以自由地修改path,当刷新时,如果服务器没有相应的响应或资源,则会出现404页面。