后端路由
当我们访问 xxx.123.com/xx 的时候,大致流程可以想象成这样的:
- 1 浏览器向服务器发出请求。
- 2 服务器监听到80端口,如果有请求过来,那么就解析url地址。
- 3 服务器根据客户端的路由配置,然后就返回相应的信息(比如html字符串、json数据或图片等)。
- 4 浏览器根据数据包的 Content-Type来决定如何解析数据。
我们使用后端路由需要频繁的刷新页面,
为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router或者React-Router前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求。 为了达到这种目的,浏览器当前提供了以下两种支持:
hash(即地址栏 URL 中的 # 符号)。
比如这个 URL:www.123.com/#/test,hash 的值为 #/test。
特点: hash 虽然出现在 URL 中,但不会被包括在 HTTP,因为我们hash每次页面切换其实切换的是#之后的内容,而#后内容的改变并不会触发地址的改变,所以不存在向后台发出请求,对后端完全没有影响,因此改变 hash 不会重新加载页面。
每次hash发生变化时都会调用 onhashchange事件
优点:可以随意刷新
history(利用了浏览器的历史记录栈)
特点:利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)
在当前已有的 back、forward、go的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的URL,但浏览器不会立即向后端发送请求。 history:可以通过前进 后退控制页面的跳转,刷新是真是的改变url。
缺点:不能刷新,需要后端进行配置。由于history模式下是可以自由修改请求url,当刷新时如果对对应地址进行匹配就会返回404。 但是在hash模式下是可以刷新的,前端路由修改的是#中的信息,请求时地址是不会变的