hash 和history的区别

文章目录

    • 前言
    • 区别
    • hash模式
      • 原理
      • 优点
      • 缺点
    • history 模式
      • 原理
      • 优点
      • 缺点

前言

在前端中,路由是一个常见的需求,在单页面应用(SPA)中。为了实现无刷线的页面切换,通过会使用浏览器的URL来管理应用的状态。两种常见的路由模式hash模式和 history模式
hash模式和 history模式都属于浏览器自身的特性,

区别

● history和 hash两种路由模式都是利用浏览器的两种特性实现的前端路由
○ history是利用浏览历史记录的API实现的
○ hash是监听location对象hash值变化来实现
● history的URL中没有 #号
● 相同的URL,history 会触发添加到浏览器历史记录栈中,hash不会触发

hash模式

例如:http://www.asdf.com/#/hello

原理

● Hash是URL中#号分割,后面的部分也称为锚点(哈希值)
● 当URL的哈希值发生变化时,浏览器不会重新加载页面,而是会滚动到页面中对应的ID的元素位置。
● 利用这一特性,在前端框架中可以监听哈希值的变化,并根据不同的哈希值来切换页面内容,从而实现无刷新的页面导航

优点

● 兼容性好:几乎所有的浏览器都支持哈希值的变化
● 简单易用:实现起来相对简单,不需要服务器端的支持

缺点

● URL不够美观:URL中带有#号,可能会影响用户体验
● SEO不友好:搜素引擎可能无法正常索引带有哈希值的URL

history 模式

原理

● history API是HTML5引入的一组API,包括pushState,replaceState,popstate事件
● pushState方法可以在不重新加载页面的情况下改变当前页面的URL。
● replaceState方法可以替换当前历史记录的条目,而不是添加新的条目。
● popstate事件会在浏览器的前进/后退按钮被点击时触发

优点

● URL美观:URL中没有#号,更加符合现代网站的设计风格
● SEO友好:搜素引擎可以更好的索引这些URL,有利于SEO

缺点

● 兼容性较差:在一些老的浏览器中可能会存在问题。
● 需要服务端配合:在使用History模式时,服务器需要配置正确的路由规则,以确保所有路径都能正常返回入口文件,否则请求会返回404
○ 解决办法:后端配置正确的路由规则,
■ node为例

// 下载npm包解决
npm install --save connect-history-api-fallback
`````js
// node 中使用
const express = require('express')
var history = require('connect-history-api-fallback')
const app = express()app.use(history())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453116.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UDP/TCP协议详解

目录 一,自定义应用层协议: 1)xml 2),JSON 3),yml 4),google protobuffer 二,传输层UDP/TCP: UDP协议: TCP协议: TCP的核心机制一:确认应答 TCP核心机制二:超时重传 TCP核心机制三:连接管理 TCP核心机制四:滑动窗口 TCP核心机制五:流量控制 TCP核心机制六:拥塞控制…

基于springboot的网上服装购物商城系统

基于springboot的网上服装购物商城系统 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取: &#x…

Video-LLaMA论文解读和项目部署教程

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding 相关工作 大型语言模型: 本文的工作基于这些LLM,并提供即插即用插件,使其能够理解视频中的视觉和听觉内容。 多模态大型语言模型: 现有的方法可以分为两大类。 第一类包括使用LL…

【Word原件测试资料合集】软件系统功能测试方案,软件测试方案(整体方案),软件测试文档-测试计划模版(功能与性能),软件测试流程

一、 前言 (一) 背景 (二) 目的 (三) 测试目标 (四) 适用范围与读者对象 (五) 术语与缩写 二、 软件测试实施流程 (一) 测试工作总体流…

stm32驱动W2812

W2812简介 W2812 内置有控制电路和 RGB LED 灯珠,用户只需通过一条数据线进行控制 每一个LED的R、G、B分别由八位数据控制颜色浓度,(每种颜色浓度有0~255档,理论上RGB就可以组成256的3次方中颜色组合)即每个LED需要…

基于MATLAB的混沌序列图像加密程序

设计目的 图像信息生动形象,它已成为人类表达信息的重要手段之一,网络上的图像数据很多是要求发送方和接受都要进行加密通信,信息的安全与保密显得尤为重要,因此我想运用异或运算将数据进行隐藏,连续使用同一数据对图…

【Eclipse系列】解决Eclipse中xxx.properties文件中文乱码问题

问题描述:由于eclipse对Properties资源文件的编码的默认设置是ISO-8859-1,所以在打开.properties文件时,会发现中文乱码了,如图: 解决方法: 1、一次生效法 右击该properties文件–>properties–>Re…

力扣2653.滑动窗口的美丽值

给你一个长度为 n 的整数数组 nums ,请你求出每个长度为 k 的子数组的 美丽值 。 一个子数组的 美丽值 定义为:如果子数组中第 x 小整数 是 负数 ,那么美丽值为第 x 小的数,否则美丽值为 0 。 请你返回一个包含 n - k 1 个整数…

__问题——进入启动文件_卡死在Default_Handler_死机

MCU:STM32F407VET6 先说结论,调试时跳转到启动文件里的死循环,只要不是硬件错误中断,那么多半是因为中断处理函数没有定义导致的。 【历程】 今天在测试最小单片机系统时,定义了一个按键处理,依赖的是外部中…

全网免费的文献调研方法以及获取外网最新论文、代码和翻译pdf论文的方法(适用于硕士、博士、科研)

1. 文献调研 学术搜索引擎(十分推荐前三个,超有用):使用 Google Scholar(https://scholar.google.com/)(https://scholar.google.com.tw/)(巨人学术搜索‬‬)、(三个都可以,镜像网站) arXiv(https://arxiv.org/)、&am…

【python】OpenCV—Sort the Point Set from Top Left to Bottom Right

文章目录 1、功能描述2、代码实现3、效果展示4、更多例子5、参考 1、功能描述 给出一张图片,里面含有各种图形,取各种图形的中心点,从左到右从上到下排序 例如 2、代码实现 import cv2 import numpy as npdef process_img(img):img_gray c…

【计算机网络原理】GBN,SR,TCP区别以及案例介绍

概念介绍 GBN、SR和TCP协议的主要区别在于它们的重传机制、确认方式以及缓存机制的不同。‌ GBN(Go-Back-N)协议在数据传输中,如果某个报文段没有被正确接收,那么从这个报文段到后面的所有报文段都需要重新发送。GBN采用累计应答…

网络安全基础知识点_网络安全知识基础知识篇

文章目录 一、网络安全概述1.1 定义1.2 信息安全特性1.3 网络安全的威胁1.4 网络安全的特征 二、入侵方式2.1 黑客2.1.1 入侵方法2.1.2 系统的威胁2.2 IP欺骗与防范2.2.1 TCP等IP欺骗基础知识2.2.2 IP欺骗可行的原因2.2.3 IP欺骗过程2.2.4 IP欺骗原理2.2.5 IP欺骗防范2.3 Sniff…

Verilator——最简单、最细节上手教程

目录 前言工具安装Verilator 安装GTKwave 安装 Verilator 基础用法fst格式和vcd格式的wave文件Verilator 的使用 Verilator 的进阶使用与GDB搭配与makefile搭配 Verilator 的高阶用法访问模块内部数据 前言 此教程会以ubuntu22.04为例 从如何安装,到如何使用 全程帮…

双十一购物节有哪些好物值得入手?2024双十一好物清单合集分享

一年一度的双十一购物狂欢节即将来临,各大平台纷纷开启预热活动,伴随着品牌的疯狂折扣和满减优惠,众多商品即将迎来超值的价格。现在正是大家“剁手”换新装备的大好时机。作为一名深耕智能产品多年的资深达人,今天这期我将从不同…

论文研读 | End-to-End Object Detection with Transformers

DETR:端到端目标检测的创新 —— 作者 Nicolas Carion 等人 一、背景与挑战 目标检测是计算机视觉领域的一个核心任务,要求模型精确识别图像中的物体类别和位置。传统方法如 Faster R-CNN,因其区域建议网络等复杂结构,使得模型调…

Java使用原生HttpURLConnection实现发送HTTP请求

Java 实现发送 HTTP 请求,系列文章: 《Java使用原生HttpURLConnection实现发送HTTP请求》 《Java使用HttpClient5实现发送HTTP请求》 《SpringBoot使用RestTemplate实现发送HTTP请求》 1、HttpURLConnection 类的介绍 HttpURLConnection 是 Java 提供的…

Siri哑口无言?苹果AI功能落后竞争对手整整2年

就在近期,苹果员工声称:苹果的AI技术可能落后于其主要竞争对手整整两年之久。这个消息犹如一颗重磅炸弹,在科技圈引发了广泛的讨论和猜测。究竟是什么原因导致了这个曾经的创新先锋在AI赛道上如此落后? 苹果AI落后近两年&#xff…

安装nginx实现多ip访问多网站

关闭防火墙并停selinux: 挂载: 安装nginx: 判断nginx是否成功启动: 打开nmtui并添加多个ip: 重启nmtui: 查看多ip是否配置成功: 配置文件: 创建文件: 根据配置在主机创建数据文件&a…

leetcode day1 910+16

910 最小差值 给你一个整数数组 nums&#xff0c;和一个整数 k 。 在一个操作中&#xff0c;您可以选择 0 < i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] x &#xff0c;其中 x 是一个范围为 [-k, k] 的任意整数。对于每个索引 i &#xff0c;最多 只能 …