后端路由*路径(路由分发)对应不同路由(req,res,next)*req的不同回调函数处理;获取请求参数*res:返回请求数据*next:调用后续回调函数前端路由*路由是根据不同的url请求不同的页面内容*前端路由是将不同路由对应的任务交给不同的content或者pages到前端,以前是通过server根据url的不同返回不同的pages来实现的。*使用H5的history.pushState和history.replaceState,这两个新的历史API为前端操作浏览器的历史栈提供了可能*这两个API将操作浏览器的历史栈,不会引起页面刷新。*不同的是pushState会增加一条新的历史记录,而replaceState会替换当前的历史记录。应用:单页应用优缺点:*优点:用户体验好,无需每次都向服务器发送请求页面数据,响应速度快*缺点:使用浏览器的前进后退键时,请求会被resent,这是不合理的1.基于Ajax的Web应用程序最明显的特征是它们使用浏览器原生支持的XMLHttpRequest对象与后台服务器进行通信。2、由于这种通信方式不需要页面刷新动作,所以无论与后台通信多少次,浏览器的URL始终保持在初始地址不变。3、随之而来的一个问题是不断变化的页面状态信息无法记录在浏览器的历史栈中,以至于用户无法使用浏览器的前进/后退按钮来切换不同的状态页面。解决方案:浏览器可以支持用户访问的页面之间的前进/后退操作,依赖于内部维护的历史对象。出于安全考虑,浏览器不允许JavaScript脚本对这个对象进行增删改查等操作,只能通过history.back/forward()等方法访问。由于页面状态发生变化时,脚本无法直接影响浏览器的历史信息,因此触发浏览器添加新的历史记录的唯一方式就是通过URL的变化。这意味着需要Ajax应用程序的不同页面状态与URL进行一对一的映射,当返回或前进到某个URL时,应用程序本身可以在不刷新页面的情况下跳转到该页面。正确的页面状态。如何改变Ajax应用的初始URL,同时这种改变的切换不会导致页面重新加载?答案只有一个,那就是借助于“片段标识符”(fragmentidentifier),用于在页面内定位资源片段,即“#”之后的字符串(hashstring)"符号在URL中。浏览器向服务器请求资源时,分片标识不会和baseURL一起发送给服务器,只是帮助浏览器在得到返回的结果后,快速定位到相应锚点(anchor)标识的资源服务器。的资源片段,即使找不到对应的锚点,浏览器也不会报错。正是基于浏览器的这一特点,构建分片标识符与页面状态的映射关系成为解决此类问题的基础。哈希值通过一定的算法将一个任意长度的二进制串映射成一个较小的固定长度的二进制串。这个字符串就是对应的哈希值。主要特点是它是唯一的和不可逆的。前端路由的hash值(#)----->angularhash一般用在spa单页应用中。因为浏览器通过不同hash值映射的url,添加了不同的url历史记录。通过浏览器的pushState和replaceState进行操作,请求不同的浏览器记录,达到请求不同页面的效果。H5中提供的两个操作值得API来操作哈希值。func监控哈希变化
