网站首页 > 精选教程 正文
vue-router的hash模式和history模式
开发中一直在用 vue,也知道 Vue Router 有 hash 和 history 两种模式,hash 模式路径中会带上 # 符号,看着不美观;history 模式路径中则没有 #,路径看着更漂亮,但是需要服务器配合设置,所以我们项目中一般都是使用 history 模式。之前对于 的理解也就限于这些了,后面学了服务器部署、nginx这些但还是一知半解。
直到今天翻看 Vue CLI 文档时,突然对其原理有了新的理解。
Hash 模式
hash 模式是用 createWebHashHistory() 创建,hash指的是地址中 # 号以及后面的字符,这个 # 就是hash符号,中文名叫哈希符或锚点,哈希符后面的值,我们称之为哈希值。如 http://127.0.0.1/index/#/hello-world,这里的 #/hello-world 就是 hash。
hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。由于从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有不好的影响。
其实也就跟我们正常在页面中使用的 a 标签锚点一样,只会影响前端页面。
History 模式
window.history 对象是HTML5提供的用于维护当前标签页浏览历史的对象,主要功能是前进后退和在不刷新页面的情况下,修改地址栏里的URL地址。history 模式就是利用了 HTML5 historyAPI,所以也叫 HTML5 模式,Vue Router 中是用 createWebHistory() 创建。
浏览器中看到的路径就是我们平时正常看到的网址:http://127.0.0.1/index/hello-world,当用户进入这个页面,实际会去向服务器项目根目录下 /index/hello-world 去请求资源,但是我们平时用 vue、react 之类框架开发出的项目打包后是这个样子的:
单页面应用也就一个 index.html 入口文件,其他的资源都是动态引入到 index.html 文件里的,当去向浏览器请求 /index/hello-world 资源时,正常是找不到的,也是 404,这也是 history 模式需要服务器配合设置的原因,就是把请求中所有没有匹配到的资源都默认给指向到 index.html 上去,这也是为什么需要服务器配置的原因。
nginx 参考配置:
location / {
try_files $uri $uri/ /index.html;
}
猜你喜欢
- 2024-10-10 面试官:你对Redis缓存了解吗?面对这5道面试题是否有很多问号?
- 2024-10-10 K8s笔记(六):了解控制器——Deployment
- 2024-10-10 nginx服务器session共享常见解决办法
- 2024-10-10 面试官:Redis缓存了解吗?面对这11道题是否有很多问号?
- 2024-10-10 nginx sticky 实现基于cookie 的负载均衡
- 2024-10-10 精品推荐!Nginx负载均衡—如何自定义URL中的hash key
- 2024-10-10 Nginx负载均衡之ip hash与hash模块,弥补Round-Robin的缺陷
- 2024-10-10 Redis 选择hash还是string 存储数据?
- 2024-10-10 Nginx基本数据结构之队列(Queue),散列(Hash)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)