首页 > 其他分享 >前端面试题:hash模式和history模式

前端面试题:hash模式和history模式

时间:2024-03-26 18:04:26浏览次数:17  
标签:面试题 hash URL 模式 服务器 路由 history

hash(哈希)和history(历史)是前端路由的两种模式,它们的主要区别在url,兼容性,服务器配置,美观性,和导航操作上面

1,URL

hash的url前面有#来表示路径,而history没有

hash:

hash 模式是一种把前端路由的路径用 # 拼接在真实 url 后面的模式,通过 hashchange 事件监听 hash 值的改变来渲染页面对应的组件。hash 模式不会向后端发送 http 请求,所有的 hash 值操作都与后端无关。

history:

history 是 HTML5 提供的新特性,允许开发者直接更改前端路由,也就是更改 url 地址而无需向后端发送 http 请求。

history 是 window.history 的简写模式,是 History 构造函数的实例化对象。

2,兼容性

hash无需后端配置,可以兼容当前版本较低的浏览器和IE,而history需要浏览器支持html5以上的浏览器和服务器支持

3服务器支持

hash不需要服务器支持,history需要服务器配置来保证子路由返回正确页面,

hash:

当URL发生变化时,浏览器不会向服务器发送请求,而是通过监听 hashchange 事件来捕获URL的变化,并根据哈希值来切换页面内容。哈希模式的优势在于不需要服务器端的特殊配置,可以在静态服务器上直接部署。

history:

History模式使用HTML5的 history.pushState 和 history.replaceState 方法来改变URL,例如: http://example.com/home 。在History模式下,URL的路径部分会与服务器进行交互,因此需要服务器端的支持。当URL发生变化时,浏览器会向服务器发送请求,服务器根据URL返回相应的页面内容。History模式的优势在于URL更加友好,不会包含哈希部分,看起来更加清晰

4,美观性

hash路由路径由#连接,看起来不美观,history没有#看起来干净直观

5,导航操作

hash在改变路由时会触发hashchange事件,可以通过监听hashchange响应路由变化,而history通过historyAPI改变路由,不会触发事件,需要使用编程式导航

解决history模式下页面刷新404问题

原因

因为浏览器在刷新页面时,它会向服务器发送 GET 请求,但此时服务器并没有配置相应的资源来匹配这个请求,因此返回 404 错误。

解决方法

在服务器端进行相关配置,让所有的路由都指向同一个入口文件(比如 index.html),由前端路由来处理 URL 请求,返回对应的页面内容。

在本地调试时,可以在webpack中配置

module.exports = {
  //...
  devServer: {
    historyApiFallback: true, // 自动将404响应跳转到首页入口文件 index.html
  }
};

在生产环境下

配置方式取决于对应项目使用的服务器环境,常见的有 Apache、Nginx 等

Nginx:

// ...
location / {
	root /opt/nginx/html/;
	try_files $uri $uri/ /index.html; // 按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理;
}

Apache:

在项目目录下新建文件.htaccess文件

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

标签:面试题,hash,URL,模式,服务器,路由,history
From: https://blog.csdn.net/weixin_74100422/article/details/137025668

相关文章

  • 字符串 hash
    (由于字符串hash和整数hash是两个东西,以下将字符串hash称作strash)前情提要:strash:我来!(非常好数据,使我的strashWA掉)strash是什么?strash有什么用?该如何避免上述情况?strash是什么strash的原理其实很简单:将一个字符串当作\(b\)进制数。Soyouwroteawrongcod......
  • 代理模式(静态代理和动态代理)
    1.静态代理    静态代理中代理类与被代理类都需要实现同一个接口,这就说明我们的一个静态代理类只能代理一个类,并且还要事先知道我们要代理哪个类才能写代理类,如果我们有其他类还想使用代理那就必须再写一个代理类。【1】测试案例:法外狂徒张三叫律师打官司packageco......
  • Java面试题:请解释Java中的集合框架?并详细说明各个集合的应用场景
    Java中的集合框架(CollectionFramework)是一组用来存储和管理对象的类和接口的集合,它为开发中常见的数据结构和算法提供了一种统一的、可重用的实现。Java集合框架的主要目的是提供一种灵活、可扩展的方式来存储和操作对象集合,而无需关心底层数据的存储细节。Java集合框架主......
  • Spring中用到的一些设计模式
    单例模式:bean默认就是单例原型模式:指定作用域为prototype工厂模式:BeanFactory模板方法:postProcessBeanFactory,onRefresh,initPropertyValue策略模式:xmlBeanDefinitionReader,PropertiesBeanDefinitionReader观察者模式:listener,event,multicast适配器模式:Adapter......
  • CentOS 7.9 快速搞定网络配置(NAT模式)
    本机网络配置:  2.虚拟机NAT模式配置  3.centos网卡配置vi/etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEF......
  • B2C平台是什么?B2C模式为企业营销提供了哪些功能?
    B2C平台,全称为Business-to-Consumer平台,也就是企业对个人的电子商务模式,是指企业直接向消费者销售产品和服务的电子商务平台。这种模式消除了中间商的存在,使得企业能够直接与消费者进行交易,降低了成本,提高了效率。在当前的企业营销运营中,B2C平台承担着多种重要的功能。首先,它......
  • 示波器的极简模式和全功能模式
     我们经常会发现主流的数字示波器的功能菜单使用比较麻烦,需要多次点击按钮的组合并在多级菜单里进行选择。所以LOTO虚拟示波器的上位机软件完全按照不同的思路设计,尽量让功能按钮在界面上随手能操作。但是随着功能越来越多,不得不将一些功能开始隐藏在标签页里,界面上摆放的按钮和......
  • rocketmq集群消费模式和广播消费模式代码分享
    Rocketmq消费模式在ApacheRocketMQ有两种消费模式,分别是:集群消费模式:当使用集群消费模式时,RocketMQ认为任意一条消息只需要被消费组内的任意一个消费者处理即可。(默认的消费模式)广播消费模式:当使用广播消费模式时,RocketMQ会将每条消息推送给消费组所有的消费者,保证消......
  • Python面试题:神秘公司的挑战(3)!
    题目十一:闭包(Closure)的概念和示例:答案:闭包是指在函数内部定义的函数,并且内部函数可以访问外部函数的局部变量。闭包可以捕获并保持外部函数的状态,使得函数具有记忆功能。以下是一个闭包的简单示例:defouter_function(x):definner_function(y):returnx+y......
  • 【插件更新日志】新发布的1.5.0版本插件中的增强模式,作用几何?
    近日,我们的插件迎来了自发布以来的首个大更新,发布了1.5.0版,更新了多个新特性,今天就带您来了解一下其中的【增强】模式。一、令人头疼的兼容性问题如上图所示,这是在MTK天玑7200-Ultra芯片下测试同一人体姿态识别的效果,未开启【增强】模式时,识别出的关键点错位严重,根本无法使......