HTTP(超文本传输协议)详解
目录
一、基本概念
二、HTTP报文(结构)
(一) 请求报文
(二) 响应报文
三、HTTP请求方法
1. GET方法
2. POST方法
3. PUT方法
4. HEAD方法
5. DELETE
6. OPTIONS
一、知识扩展
7. TRACE
8. CONNECT
四、HTTP持久通信
(一) HTTP keep-alive
(二) HTTP请求并发
1. 管线化
2. 多路复用
(三) Cookie
1. Cookie的由来
2. Cookie的基本概念
3. Cookie的工作流程
五、HTTP状态码
(一) 常见状态码
六、HTTPS概述
(一) SSL/TLS
一、基本概念
HTTP(超文本传输协议)用于在客户端(如浏览器)和服务器之间传输超文本数据,例如网页、图片、视频等。
- HTTP是一种不保存状态(无状态)协议,即每个请求都是独立的,服务器不会自动保留客户端的前次请求信息。
- 通信方式分为:请求(客户端)和响应(服务器端)
- 请求访问文本或图像等资源的一端称为客户端
- 提供资源响应的一端称为服务器端。
- HTTP协议规定,请求由客户端端发出,服务器响应该请求并返回。
- 客户端请求或访问服务器端资源是通过URL/URI的方式去得到相应的资源
- URI用字符串标识某一互联网资源。
- 如:http://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
- 在日常使用中,习惯称为URL。
- URL表示资源的地点(URL是URI的子集)
- 如:http://www.iana.org
- 也可以称之为URI,因为URL是URI的子集。
- URI用字符串标识某一互联网资源。
二、HTTP报文(结构)
用于HTTP协议交互的信息被称为HTTP报文。
- 请求端(客户端)的HTTP报文叫做请求报文
- 响应端(服务器端)的HTTP报文叫做响应报文
- HTTP报文本身由多行数据构成的字符串文本。
HTTP报文分为报文首部和报文主体两部分组成,两者由空行来划分,通常,不一定要有报文主体。
- 报文首部:服务器端或客户端需处理的请求或响应的内容及属性。
- 空行(CR+LF)
- CR:回车符 - 16进制0x0d
- LF: 换行符 - 16进制0x0a
- 报文主体:应被发送的数据。
(一) 请求报文
HTTP 请求报文由客户端(如浏览器)发送到服务器,包含以下三个主要部分:
- 请求行(Request Line)
- 格式:方法 请求目标(URL) HTTP版本
- 说明:指定请求的类型、目标资源和使用的 HTTP 协议版本。
- 示例:GET /index.html HTTP/1.1
- 请求头(Headers)
- 格式:键: 值(每行一个键值对)
- 说明:提供请求的元信息,如主机、用户代理、内容类型等。
- 常见头部
- Host:目标服务器的域名。
- Accept:客户端接受的响应内容类型。
- User-Agent:客户端软件信息。
- 请求体(Body,可选)
- 说明:包含客户端发送给服务器的数据,通常用于 POST、PUT 等请求。
- 注:GET 请求通常没有请求体。
- 示例:表单数据、JSON 数据等。
- 说明:包含客户端发送给服务器的数据,通常用于 POST、PUT 等请求。
- 实例:请求报文
此例中为 GET 请求,没有请求体,因为 GET 请求通常只获取资源,不发送数据。
GET /index.html HTTP/1.1 #请求行
Host: www.example.com #此行到底是请求头
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
(二) 响应报文
- 状态行(Status Line)
- 格式:HTTP版本 状态码 状态消息
- 说明:描述响应的协议版本和处理结果。
- 示例:HTTP/1.1 200 OK
- 响应头部(Headers)
- 格式:键: 值(每行一个键值对)
- 说明:提供响应的元信息,如内容类型、内容长度等。
- 常见头部
- Content-Type:响应体的内容类型。
- Server:服务器软件信息。
- Content-Length:响应体的字节长度。
- 响应体(Body,可选)
- 说明:包含服务器返回的实际数据,如 HTML、JSON、图片等。
- 示例:网页内容、API 返回的 JSON 数据等。
- 实例:响应报文
注:响应头部和响应体之间有一个空行,表示头部信息结束。
HTTP/1.1 200 OK #状态行
Date: Sun, 25 May 2025 17:39:00 GMT #响应头
Server: Apache/2.4.41 (Unix)
Content-Type: text/html; charset=UTF-8
Content-Length: 125
Connection: keep-alive#空行(CR+LF,表示头部信息结束)
<!DOCTYPE html> #响应体
<html>
<head><title>Welcome</title>
</head>
<body><h1>Hello, World!</h1>
</body>
</html>
三、HTTP请求方法
向请求URI指定的资源发送请求报文时,采用称为方法的命令。
方法的作用在于,可以指定请求的资源按期望产生某种行为。
注:方法名区分大小写,要用大写字母。。
1. GET方法
- 功能:从服务器获取资源。用于请求数据而不对数据进行更改。
- 支持的HTTP协议版本:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3
- 示例:
请求
GET /index.html HTTP/1.1
Host:www.baidu.com响应
返回index.html的页面资源
2. POST方法
- 功能:向服务器发送数据以创建新资源。
- 数据位置:数据包含在请求体中(例如JSON、表单数据)。
- 支持的HTTP版本:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3
- 示例:
请求:
POST /abc.php HTTP/1.1
Host: www.baidu.com
Content-Length: 1560
Content-Type: application/x-www-form-urlencoded[1560字节的请求体数据]响应:
返回abc.php接收数据的处理结果
3. PUT方法
- 功能:向服务器发送数据以更新现有资源。如果资源不存在,则创建新资源。
- 支持的HTTP协议版本:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3
- 示例:
请求:
PUT /index.html HTTP/1.1
Host: www.baidu.com
Content-Length: 1560
Content-Type: text/html响应:
返回状态码204 No Content(表示服务器成功处理了请求,但不返回任何响应体)
4. HEAD方法
- 功能:用于确认URI的有效性及资源更新的日期时间等。
- 特征:类似于GET,但只返回响应头部,不返回资源内容
- 支持的HTTP协议版本:HTTP/1.0、HTTP/1.1
- 示例:
HEAD /index.html HTTP/1.1
Host:www.baidu.com响应:
返回index.html有关的响应头
5. DELETE
- 功能:从服务器删除指定的资源。
- 支持的HTTP协议版本:HTTP/1.0、HTTP/1.1
- 示例:
请求:
DELETE /index.html HTTP/1.1
Host: www.baidu.com响应:
返回状态码204 No Content(表示服务器成功处理了请求,但不返回任何响应体)
6. OPTIONS
- 功能:返回服务器支持的 HTTP 方法。
- 支持的HTTP协议版本:HTTP/1.1
- 示例:
请求:
OPTIONS * HTTP/1.1
Host: www.baidu.com响应:
HTTP/1.1 200 OK
Allow:GET,POST,HEAD,OPTIONS
一、知识扩展
如果不是访问特定资源而是对服务器本身发起的请求,可以用 * 来代替请求URI。
7. TRACE
- 功能:回显服务器收到的请求,主要用于诊断。
- 支持的HTTP协议版本:HTTP/1.1
- 示例:
请求:
TRACE /index.html HTTP/1.1
Host: www.baidi.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)响应:
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 145#空行
TRACE /index.html HTTP/1.1 #此行以下都是响应体,体现的是客户端的请求内容。
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
8. CONNECT
- 功能:建立一个到服务器的隧道,通常用于 HTTPS 连接。
- 格式:
- CONNECT 目标服务器:端口 HTTP/1.1
- Host: 目标服务器
- 格式:
- 支持的HTTP协议版本:HTTP/1.1
- 注:代理服务器的地址是通过客户端的网络配置指定的,不写在报文中。
- 如:浏览器中的设置-代理,或是curl 的 --proxy 参数。
- 示例:
请求:
CONNECT www.baidu.com:443 HTTP/1.1
Host: www.baidu.com响应:
HTTP/1.1 200 Connection Established
四、HTTP持久通信
(一) HTTP keep-alive
在 HTTP/1.0 中,每次请求都需要重新建立一次 TCP 连接,请求完成后立即关闭(即短连接)。
每个请求都经历完整的连接流程:
TCP 三次握手 → HTTP 请求/响应 → TCP 四次挥手
假如你要请求三个资源,就得重复三次这样的过程,网络开销大、性能低下。
为了解决这个问题,HTTP/1.1 引入了“持久连接”(HTTP Persistent Connection)。通过一个 TCP 连接,客户端可以连续发送多个 HTTP 请求,直到一方显式关闭连接为止:
TCP 三次握手 → 多次 HTTP 请求/响应→ TCP 四次挥手
持久连接的实现方式如下:
- HTTP/1.1 默认开启持久连接,无需额外设置。
- 请求头中添加:Connection: keep-alive
- 为了兼容旧版本或明确表达意图,可以在请求头中添加
- 如果需要关闭连接,需显式设置:Connection: close
(二) HTTP请求并发
HTTP/1.0并不允许连续多个HTTP请求,默认其是请求-响应完成之后再请求-响应。没有并发。
1. 管线化
HTTP 管线化是 HTTP/1.1 引入的特性,它允许客户端在一个持久连接上,连续发送多个 HTTP 请求,而不必等待前一个响应回来。
Request A → Request B → Request C (连续发)
← Response A ← Response B ← Response C(按顺序回)
- 特征与限制
- 请求可以并发发出去,但响应必须按请求顺序返回。
- 如果前一个响应很慢,会阻塞后续所有响应 —— 这叫队头阻塞(Head-of-line blocking)。
- 如果中间有代理服务器(如老式网关、防火墙)不支持管线化,容易出问题。
- 浏览器(Chrome、Firefox、IE)出于兼容性和稳定性考虑,默认禁用管线化。
- 本质缺点:没有真正实现请求/响应并行处理,只是请求发送的顺序变了,但响应必须串行处理。
2. 多路复用
HTTP/2.0引入了多路复用,它允许多个请求和响应在一个 TCP 连接中完全并行交错地传输,互不阻塞、顺序无关,完全解决了 HTTP/1.1 管线化的所有问题。
- 工作机制:
- HTTP/2 使用二进制格式传输,而不是文本。
- 每个请求/响应被划分成多个帧(Frame),这些帧可以交错混合在一条 TCP 连接上。
- 每个请求/响应流都有一个唯一的 Stream ID,可以并发处理。
- 多路复用和管线化的关键区别:
- 客户端发了 A、B、C 三个请求
- 管线化:
- A 响应慢,B 和 C 响应虽然早就准备好了,但不能先发,只能等 A 完成之后再处理后续请求。
- 多路复用:
- 每个请求有独立的 Stream ID,服务端谁准备好了就先返回。
- 比如:
- 去饭店点了4个菜,这四个菜不按顺序上菜,而是谁先做好谁上(多路复用)。
- 去饭店点了4个菜,即便是后几道菜做好了,也要等着第一个菜上了,再跟着上(管线化)。
(三) Cookie
1. Cookie的由来
假设要求登录认证的Web页面本身无法进行状态的管理,那每次跳转新页面就会出现两张情况:
- 再次登录
- 在每次的请求报文中附加参数来管理登录状态。
由于无状态协议的特点可以减少服务器CPU和内存资源的消耗,所以既要保存无状态这个特征又要解决类似的矛盾所以引进了Cookie技术。
2. Cookie的基本概念
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
- 本质是浏览器保存的一小段文本信息,随每次请求自动带上。
3. Cookie的工作流程
- 第一次请求网站,服务器返回响应时,设置 Cookie:
Set-Cookie: session_id=abc123; Path=/; Expires=Wed, 01 Jun 2025 00:00:00 GMT
- 浏览器保存这个 Cookie
- 之后请求同站点时,浏览器会自动带上这个 Cookie:
Cookie: session_id=abc123
五、HTTP状态码
HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常、通知出现的错误等工作。
状态码如:200 OK,以3位数字和原因短句组成。
数字中第一位指定了响应类别,后两位无分类。响应类别有以下5种。
类别 | 原因短句 | |
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
(一) 常见状态码
- 200 OK
- 请求成功,服务器已成功处理客户端请求并返回预期内容。
- 204 No Content
- 请求成功,服务器已处理请求,但无内容返回。
- 常用于指示服务器成功执行了请求(如DELETE、PUT),但无需返回数据。
- 301 Moved Permanently
- 永久性重定向
- 请求的资源已永久移动到新URL
- 302 Found
- 临时重定向
- 请求的资源暂时移动到新URL,客户端应继续使用原URL。
- 401 Unauthorized
- 需要认证(如登录)。
- 403 Forbidden
- 服务器理解请求,但拒绝授权访问。
- 404 Not Found
- 服务器无法找到请求的资源。
- 500 Internal Server Error
- 服务器在处理请求时发生内部错误,无法完成请求。
六、HTTPS概述
HTTPS并非是应用层的一种新协议,而是HTTP通信接口部分用SSL和TLS协议代替而已。
- 如:
- HTTP通信流程是:HTTP->TCP。
- HTTPS通信流程是:HTTP->SSL->TCP
- 注:目前SSL已被TLS替代(版本进化更名为TLS)但是由于历史原因,“SSL”这个名字仍常被用来泛指SSL/TLS协议。
(一) SSL/TLS
SSL/TLS(Secure Sockets Layer / Transport Layer Security)是一种安全协议,用于在客户端和服务器之间建立加密连接,以保护数据的机密性和完整性。
- SSL(安全套接字层)
- SSL由Netscape公司在1994年开发,旨在保护Web浏览器与服务器之间的通信。它经历了多个版本(1.0、2.0、3.0),但由于安全漏洞,SSL 3.0是最后一个广泛使用的版本,现已逐渐被淘汰。
- TLS(传输层安全协议)
- TLS是SSL的继任者,由IETF(互联网工程任务组)在1999年发布。TLS 1.0基于SSL 3.0改进,随后推出了:
- TLS 1.1(2006年)
- TLS 1.3(2018年)
- TLS 1.2(2008年)
- TLS是SSL的继任者,由IETF(互联网工程任务组)在1999年发布。TLS 1.0基于SSL 3.0改进,随后推出了:
相关文章:
HTTP(超文本传输协议)详解
目录 一、基本概念 二、HTTP报文(结构) (一) 请求报文 (二) 响应报文 三、HTTP请求方法 1. GET方法 2. POST方法 3. PUT方法 4. HEAD方法 5. DELETE 6. OPTIONS 一、知识扩展 7. TRACE 8. CONNECT 四、HTTP持久通信 (一) HTTP keep-alive…...
Unity安卓平台开发,启动app并传参
using UnityEngine; using System;public class IntentReceiver : MonoBehaviour {public bool isVR1;void Start(){Debug.LogError("app1111111111111111111111111");if (isVR1){LaunchAnotherApp("com.HappyMaster.DaKongJianVR2");}else{// 检查是否有传…...

jdbcTemplate.query备忘录
jdbcTemplate.query中使用全部字符串和参数注入, 查询速度为什么差距这么大 如何正确使用JdbcTemplate参数化查询 1、使用?占位符 String sql "SELECT * FROM users WHERE name LIKE ?"; List<User> users jdbcTemplate.query(sql,new Object[…...

如何搭建Z-Blog PHP版本:详细指南
Z-Blog是一款功能强大且易于使用的博客平台,支持PHP和ASP两种环境。本文将重点介绍如何在PHP环境下搭建Z-Blog博客系统,帮助您快速上线自己的个人博客站点。 准备工作 1. 获取Z-Blog PHP版本 首先,访问Z-Blog官方网站下载最新版本的Z-Blog…...
Docker 常用命令详解
🐳 Linux 安装 Docker 及常用命令详解(适用于 Ubuntu) 📦 一、安装 Docker(Ubuntu 系统) 1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装必要依赖 sudo apt install -y apt-transport-https …...
uniapp uni-id-co errCode“:“uni-id-captcha-required“,“errMsg“:“Captcha required
连续登录失败后就会出现图形验证码校验,如果前端不需要图形验证码校验,uni-id-co文件夹下找到module下的login文件夹下的login.js,注释掉Captcha相关校验,关掉即可 const {preLoginWithPassword,postLogin } require(../../lib/utils/login)…...

Github Copilot新特性:Copilot Spaces-成为某个主题的专家
概述 当今的工程团队都会面临知识碎片化的问题。关键的上下文分散在代码、文档和团队成员的头脑中,这使得他们很难在一个新的领域快速上手并完成工作。Copilot Spaces 通过集中您的项目上下文解决了这个问题,因此 Copilot 可以根据您的工作提供更智能、…...
React 第五十三节 Router中 useRouteError 的使用详解和案例分析
前言 useRouteError 是 React Router v6.4 引入的关键错误处理钩子,用于在 路由错误边界(Error Boundary) 中获取路由操作过程中发生的错误信息。 它提供了优雅的错误处理机制,让开发者能够创建用户友好的错误界面。 一、useRou…...
12分钟讲解主流React库
本内容是对 Every React Library Explained in 12 Minutes 内容的翻译与整理。 React Router React Router 是一个用于控制网站导航的库,同时也允许你自定义网站的 URL。它使用自定义组件,如 BrowserRouter、Routes 和 Route 组件,以创建 UR…...
《doubao-lite-32k 模型缓存机制使用指南》
doubao-lite-32k 模型缓存机制使用指南 一、缓存概述 1. 缓存作用 doubao-lite-32k 模型的缓存(Session 缓存)主要用于多轮对话场景,实现以下功能: 存储历史对话信息(Token),避免重复传输上下文,减少计算资源消耗。 优化长上下文(最长 32K Token)处理效率,提升多…...

攻防世界-XCTF-Web安全最佳刷题路线
每次写序都是最烦恼的,都不知道写什么,CTF是团队竞赛,有很多分支(Web安全,密码学,杂项,Pwn,逆向,安卓),可以每个领域都涉猎,或许感觉那…...

t021-高校物品捐赠管理系统【包含源码材料!!!!】
视频演示地址 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装高校物品捐赠管理系统软件来发挥其高效地信息…...

设计模式——面向对象设计六大原则
摘要 本文详细介绍了设计模式中的六大基本原则,包括单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则和合成复用原则。每个原则都通过定义、理解、示例三个部分进行阐述,旨在帮助开发者提高代码的可维护性和灵活性。通过具体代码…...

Python制作史莱姆桌面宠物!可爱的
史莱姆桌面宠物 一个可爱的桌面史莱姆宠物,它会在您的任务栏上移动并提供可视化设置界面。 这里写目录标题 史莱姆桌面宠物功能特点安装与运行直接运行方式创建可执行文件 使用说明自定义GIF说明打包说明开源地址 功能特点 可爱的史莱姆在任务栏上自动移动支持…...
React hook之userReducer
在 React 中,useReducer 是一个用于管理复杂状态逻辑的 Hook,它类似于 Redux 中的 reducer 模式,但更轻量且适用于组件内部或结合 Context API 实现全局状态管理。以下是 useReducer 的详细用法指南: 1. 基本语法 const [state, …...

Dify源码教程:账户和密码传递分析
概述 Dify系统中账户创建过程中的密码处理是Web应用安全的重要环节。本教程详细分析了从前端表单到后端存储的完整流程,展示了Dify如何安全地处理用户凭据。 前端部分 在 dify/web/app/install/installForm.tsx 文件中,当用户填写完表单并点击安装按钮…...
如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
这是一个非常深刻的问题,触及到了进化生物学、复杂系统理论和未来科技哲学的交汇点。 你可以这样理解这个问题的结构: “如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’&#x…...

数据分析图表类型及其应用场景
说明:顶部HTML文件下载后可以直接查看,带有示图。 摘要 数据可视化作为现代数据分析的核心环节,旨在将复杂、抽象的数据转化为直观、易懂的图形形式。这种转化显著提升了业务决策能力,优化了销售与营销活动,开辟了新…...
第四十二天打卡
知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 # 定义一个回调函数 def handle_result(result):"""处理计算结果的回调函数"""print(f"计算结果是: {result}")# 定…...

Github 2025-06-03Python开源项目日报 Top10
根据Github Trendings的统计,今日(2025-06-03统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10Rust项目1HTML项目1C项目1 系统设计指南 创建周期:2507 天开发语言:Pyt…...
Vim查看文件十六进制方法
在 Vim 中查看文件的十六进制格式,可以通过以下步骤实现: 方法 1:使用内置命令(无需插件) 用 Vim 以二进制模式打开文件: vim -b 文件名或打开文件后执行: :set binary转换为十六进制视图&…...

电脑提示dll文件缺失怎么办 dll修复方法
当你在使用某些应用程序或启动电脑时,看到提示“DLL文件缺失”的错误信息,这通常意味着某个必要的动态链接库(DLL)文件无法被找到或加载,导致软件无法正常运行。本文将详细介绍如何排查和修复DLL文件缺失的问题&#x…...

【自动思考记忆系统】demo (Java版)
背景:看了《人工智能》中的一段文章,于是有了想法。想从另一种观点(⭕️)出发,尝试编码,告别传统程序员一段代码解决一个问题的方式。下图是文章原文和我的思考涂鸦✍️,于是想写一个自动思考记…...
【AAOS】【源码分析】用户管理(二)-- 整体架构
整体介绍 Android多用户功能作为 Android Automotive 的重要组成部分,为不同驾驶员和乘客提供了一个更加定制化、隐私保护的使用环境。Android 多用户的存在,它可以让多个用户使用同一台设备,同时保持彼此的数据、应用和设置分隔开来。 各用户类型的权限 能力SystemAdminS…...

51单片机基础部分——独立按键检测
前言 在单片机开发中,我们会经常对单片机的状态进行控制,比如我们会控制某个灯点亮,某个灯熄灭,这个时候我们就要开始做控制,我们可以通过什么控制呢,这个地方我们选择按键控制 按键实物及工作原理 生活…...

【Docker管理工具】部署Docker可视化管理面板Dpanel
【Docker管理工具】部署Docker可视化管理面板Dpanel 一、Dpanel介绍1.1 DPanel 简介1.2 主要特点 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Dpanel镜像五、部署Dpanel…...
Github 2025-06-02 开源项目周报 Top11
根据Github Trendings的统计,本周(2025-06-02统计)共有11个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6Jupyter Notebook项目2Shell项目1Dockerfile项目1TypeScript项目1Vue项目1PowerShell项目1MindsDB:定制企业数据人工智能的开源平台…...

springboot实现查询学生
文章目录 数据库前端 请求mybatis 数据库 前端 请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <a href"/list">启动学生管理…...
深入解析C++五大常用设计模式:原理、实现与应用场景
设计模式是解决特定软件设计问题的经典方案,掌握它们能显著提升代码的可维护性和扩展性。本文详细解析C中五种最常用的设计模式,附带完整代码示例和实战技巧。 一、设计模式概述 设计模式是面向对象编程中可复用的解决方案,它们源于工程师们…...
标识符Symbol和迭代器的实现
Symbol基础 Symbol("描述") 创建唯一标识符(每次调用返回新值) Symbol.for("key") 全局注册表模式(相同key返回同一Symbol) Symbol特性 作为对象属性键时:obj[SymbolKey] value不参与常规遍历&…...