计算机网络-HTTP与HTTPS
文章目录
- 计算机网络
- 网络模型
- 网络OSI
- TCP/IP
- 应用层
- 常用协议
- HTTP报文
- HTTP状态码
- HTTP请求类型
- HTTP握手过程
- HTTP连接
- HTTP断点续传
- HTTPS
- HTTPS握手过程
计算机网络
网络模型
为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。
网络模型是计算机网络中用于理解和设计网络通信的分层架构
主要分OSI模型和TCP/IP模型
网络OSI
-
物理层
传输原始比特流,定义物理介质(电缆、光纤等)的电气、机械特性。
数据单元:比特(Bit)
-
数据链路层
数据封帧,在直接相连的节点间可靠传输数据帧,MAC地址寻址,错误检测。
数据单元:帧
-
网络层
负责数据的路由转发分片,IP地址寻址。
数据单元:数据包
-
传输层
端到端通信,确保可靠传输(TCP)或快速传输(UDP)。
数据单元:TCP,UDP
-
会话层
建立、管理和终止会话,同步数据交换。
-
表示层
数据格式转换、加密/解密(如SSL/TLS)、压缩(如JPEG、MPEG)。
-
应用层
提供用户统一的接口,支持应用程序通信。
TCP/IP
-
网络接口层
处理物理连接和本地网络数据传输。
-
网络层
IP寻址、路由。
-
传输层
处理主机到主机的通信(TCP、UDP)。
-
应用层
支持 HTTP、SMTP 等最终用户进程。
应用层
- 提供应用程序与网络之间的交互接口(如浏览器、邮件客户端)。
- 用户通过应用层协议访问网络服务(如访问网页、发送邮件)。
常用协议
HTTP,HTTPS,CDN,DNS等。
默认端口:
HTTP:80
HTTPS: 443
HTTP报文
无论是请求报文还是回应报文,均有3部分组成
|-----------------------|
| 起始行 | → 请求方法/状态码等
|-----------------------|
| 头部字段 | → 元数据(键值对)
|-----------------------|
| 空行 | → 分隔头部和正文
|-----------------------|
| 消息体 | → 实际传输的数据(可选)
|-----------------------|
-
请求报文
[起始行]:方法/请求URL/HTTP版本
[头部字段]:包含关于请求的附加信息,如Host、User-Agent、Content-Type等。
[空行]
[消息体]:用于传递数据(如POST
请求的表单或JSON数据)。POST /login HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Content-Type: application/x-www-form-urlencoded Content-Length: 27username=admin&password=123
-
响应报文
[起始行] :包含HTTP版本/状态码/状态信息。
[头部字段] :包含关于响应的附加信息,响应数据类型,数据类型,cookie等
[空行]
[消息体] :包含响应的数据,通常是服务器返回的HTML、JSON等内容HTTP/1.1 200 OK Content-Type: text/html Content-Length: 137 Date: Wed, 21 Oct 2023 07:28:00 GMT<html><body><h1>Welcome to Example.com</h1></body> </html>
HTTP状态码
分类 | 描述 | 常见状态码 |
---|---|---|
1xx | 信息类(请求已被接收,继续处理) | 100, 101 |
2xx | 成功类(请求被成功处理) | 200, 201, 204 |
3xx | 重定向类(需进一步操作以完成请求) | 301, 302, 304 |
4xx | 客户端错误类(请求有误,服务器无法处理) | 400, 401, 403, 404 |
5xx | 服务器错误类(服务器处理请求失败) | 500, 502, 503 |
其中常用的状态码:
- 200:请求被成功处理
- 301:资源已永久迁移到新URL(网站更换域名,旧链接跳转到新地址)
- 302:资源临时从其他URL返回,客户端后续应继续请求原地址(未登录用户访问受限页面,临时跳转到登录页)
- 404:请求的资源不存在
- 500:服务器内部错误,无法完成请求(后端代码抛出未捕获的异常,如数据库连接失败)
HTTP请求类型
-
GET
-
用途:获取资源(从服务器读取数据)。
-
特点:
- 安全且幂等。(幂等:多次重复请求与单次请求效果相同)
- 参数通过 URL 传递(如
/users?id=1
)。 - 通常无请求体(但技术上允许)。
-
示例:
GET /api/users/1 HTTP/1.1 Host: example.com
-
-
POST
-
用途:提交资源(向服务器发送数据,可能创建新资源)。
-
特点:
- 非安全、非幂等(非幂等:多次请求可能产生不同结果)。
- 数据通过请求体传输(如 JSON、表单)。
- 常用于创建新资源或触发复杂操作。
-
示例:
POST /api/users HTTP/1.1 Content-Type: application/json{"name": "Alice", "age": 25}
-
-
PUT
-
用途:全量更新资源(替换目标资源的全部内容)。
-
特点:
- 幂等。
- 需指定完整资源数据,用于覆盖已有内容。
- 若资源不存在,可能创建新资源(取决于实现)。
-
示例:
PUT /api/users/1 HTTP/1.1 Content-Type: application/json{"name": "Bob", "age": 30}
-
-
DELETE
-
用途:删除资源。
-
特点:
- 幂等。
- 通常无请求体。
-
示例:
DELETE /api/users/1 HTTP/1.1 Host: example.com
-
-
HEAD
-
用途:获取资源的元数据(与
GET
类似,但无响应体)。 -
特点:
- 安全且幂等。
- 常用于检查资源是否存在或验证缓存。
-
示例:
HEAD /api/users/1 HTTP/1.1 Host: example.com
-
HTTP握手过程
HTTP 本身无握手过程,其通信依赖 TCP 三次握手建立连接。
整个过程如下:
1.TCP三次握手
客户端 服务器| || ---- SYN(seq=x) ----------> || || <--- SYN-ACK(seq=y, ack=x+1)-|| || ---- ACK(ack=y+1) --------->|| |
-
步骤解释:
-
SYN:客户端发送同步报文,携带初始序列号
seq=x
。 -
SYN-ACK:服务器回应同步确认,携带自己的序列号
seq=y
和对客户端的确认号ack=x+1
。 -
ACK:客户端确认服务器的响应,连接建立。
-
2.HTTP请求/响应
TCP 连接建立后,客户端直接发送 HTTP 请求:
GET /index.html HTTP/1.1
Host: example.com
服务器返回 HTTP 响应:
HTTP/1.1 200 OK
Content-Type: text/html<html>...</html>
3.连接关闭
通信完成后,通过四次挥手关闭连接:
客户端 服务器| || ---- FIN -------------------> || <---- ACK ------------------- || || <---- FIN ------------------- || ---- ACK -------------------> || |
HTTP连接
HTTP是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应。
- 短连接
这样的连接就是短连接,一次连接只能请求一次资源。
-
长连接
HTTP 的 Keep-Alive 就是实现了这个功能,可以使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态,避免了连接建立和释放的开销,这个方法称为 HTTP 长连接。
HTTP断点续传
断点续传允许客户端只请求资源的一部分,而不是整个文件。这对于大文件下载非常有用,特别是当下载中断时,可以从中断的地方继续,而不必重新开始
举个例子,大文件下载中断后恢复的流程如下:
假设文件总大小为2GB(2,147,483,648 字节),已经下载了500MB(即 524,288,000 字节)后中断了,剩余1.5GB未下载。
-
客户端首次下载(0~500MB)
客户端未指定
Range
头部,尝试完整下载:GET /large-video.mp4 HTTP/1.1 Host: example.com
-
服务器响应
服务器返回完整文件(若支持断点续传,会包含
Accept-Ranges
: bytes):HTTP/1.1 200 OK Accept-Ranges: bytes Content-Length: 2147483648 Content-Type: video/mp4[视频文件的前 524,288,000 字节...(下载中途网络断开)]
-
客户端发送 HEAD 请求
确认服务器是否支持范围请求:
HEAD /large-video.mp4 HTTP/1.1 Host: example.com
-
服务器响应:
返回
Accept-Ranges: bytes
表示支持:HTTP/1.1 200 OK Accept-Ranges: bytes Content-Length: 2147483648 Content-Type: video/mp4 Last-Modified: Wed, 21 Oct 2023 00:00:00 GMT ETag: "abc123xyz"
-
客户端发起续传请求:
通过
Range
头部指定从已下载位置继续请求:GET /large-video.mp4 HTTP/1.1 Host: example.com Range: bytes=524288000- # 请求 500MB 之后的所有数据 If-Range: "abc123xyz" # 使用 ETag 校验文件未修改
-
Range: bytes=524288000-
:表示请求从第 500MB 到文件末尾。 -
If-Range
:若文件未修改(ETag 匹配),服务器返回剩余部分;若已修改,返回完整文件。
-
-
服务器处理请求:
-
文件未修改:返回
206 Partial Content
和剩余数据:HTTP/1.1 206 Partial Content Content-Range: bytes 524288000-2147483647/2147483648 Content-Length: 1623195648 # 剩余 1.5GB 的长度(2147483648 - 524288000=1623195648) Content-Type: video/mp4 ETag: "abc123xyz"[视频文件的 500MB ~ 2GB 数据]
-
文件已修改:返回
200 OK
和完整文件(需重新下载)。
-
-
客户端合并文件:
客户端将已下载的
500MB
数据与续传的1.5GB
数据按字节顺序拼接,得到完整文件。
HTTPS
HTTP和 HTTPS(HTTP Secure)是 Web 通信的核心协议,HTTPS 本质是 HTTP 的安全版本,通过加密和身份验证保障数据传输的安全性。
HTTP为什么不安全?
核心原因在于其明文传输、缺乏身份验证和完整性保护
-
明文传输
HTTP协议在传输过程中不加密数据,所有内容(如密码、银行卡号、聊天记录)均以明文形式在网络中传输。
-
无身份验证
HTTP协议不验证服务器身份,用户无法确认自己连接的是真实服务器还是攻击者的伪造站点。
-
数据无完整性保护
HTTP传输的数据无完整性校验机制,攻击者可随意修改传输内容。
所以就需要用到HTTPS进行安全管理:
那么HTTPS是如何保证安全性的呢?
- 在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
- HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTPS握手过程
HTTPS 在 TCP 连接基础上增加了 TLS/SSL 握手,用于协商加密参数、验证身份并生成会话密钥。
1.TCP 三次握手
与 HTTP 相同,首先建立 TCP 连接。
2.TLS握手
客户端 服务器| || ---- Client Hello(支持的加密套件等)-----> || || <---- Server Hello(选定加密套件)--------- || <---- Certificate(服务器证书)----------- || <---- Server Key Exchange(可选)--------- || <---- Server Hello Done ---------------- || || ---- Client Key Exchange(预主密钥)------> || ---- Change Cipher Spec(准备加密)-------> || ---- Finished(加密验证)----------------> || || <---- Change Cipher Spec(准备加密)------- || <---- Finished(加密验证)---------------- || |
-
第一次握手
客户端向服务器发起加密通信请求,也就是 ClientHello 请求。
- TLS 版本:支持的 TLS 版本。
- 随机数1:32 字节的随机数,用于生成会话密钥。
- 加密套件列表:支持的加密算法组合
-
第二次握手
服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。
- TLS 版本:双方协商后的版本。
- 随机数2:32 字节的随机数,也用于生成会话密钥。
- 选定的加密套件:从客户端列表中选择的加密套件
- 证书链:服务器公钥证书(由 CA 签发)
-
第三次握手
Client Key Exchange。
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。
如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
- 随机数3:该随机数会被服务器公钥加密。
- 加密通信算法改变通知,通知服务器后续消息将加密。
- 客户端握手结束通知。
密钥生成过程:
- 客户端使用3个随机数生成 主密钥(Master Secret)。
- 主密钥进一步生成 会话密钥(Session Key)
-
第四次握手
- 服务器 → 客户端
服务器确认加密参数:- Change Cipher Spec:通知客户端后续消息加密。
- Finished:发送加密的验证消息,确认握手完整性。
- 服务器 → 客户端
3.加密的HTTP通信
握手完成后,所有 HTTP 数据通过会话密钥加密传输:
客户端 服务器| || ---- Encrypted HTTP Request -----------> || <---- Encrypted HTTP Response ---------- || |
4.连接关闭
先关闭 TLS 连接,再关闭 TCP 连接。
不断学习中,结合小林Coding整理了些笔记,感谢大家的观看>W<
相关文章:

计算机网络-HTTP与HTTPS
文章目录 计算机网络网络模型网络OSITCP/IP 应用层常用协议HTTP报文HTTP状态码HTTP请求类型HTTP握手过程HTTP连接HTTP断点续传HTTPSHTTPS握手过程 计算机网络 网络模型 为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。 网络模型是计算机网络中用于…...

信号波形发生器电路Multisim仿真
一、电路 二、示波器 三、示波器波形 四、所遇到的问题 1、只是把电路仿真出来了,具体原理没有理解。 解: 第一个波形是正弦波,是由电阻和电容的振荡电路产生的。 第二个波形是方波,产生的正弦波通过电压比较器输出一个方波。…...
深入解析Java微服务架构:Spring Boot与Spring Cloud的整合实践
深入解析Java微服务架构:Spring Boot与Spring Cloud的整合实践 引言 随着云计算和分布式系统的快速发展,微服务架构已成为现代软件开发的主流模式。Java作为企业级应用开发的核心语言,结合Spring Boot和Spring Cloud的强大生态,…...
医学影像辅助诊断系统开发教程-基于tensorflow实现
源码下载地址: https://download.csdn.net/download/shangjg03/90873910 1. 简介 医学影像辅助诊断系统是利用计算机视觉和深度学习技术,帮助医生分析医学影像(如X光、CT、MRI等)并提供诊断建议的系统。本教程将指导你开发一个基于深度学习的胸部X光肺炎检测系统。 2. 准备…...
前端单点登录
前端实现单点登录(SSO) 单点登录(Single Sign-On,简称 SSO)是一种认证机制,允许用户在多个系统之间只需登录一次,就可以访问所有相关系统,而不需要重复输入账号和密码。它的目标是提…...

Spring AI 介绍
Python一直是AI领域的主要语言, 主要原因是因其语法简洁易学、拥有丰富且强大的AI专用库及框架、具备跨平台兼容性且社区生态活跃,能高效支撑AI算法开发、数据处理及模型部署。 Spring开发了AI开发的框架Spring AI,对于Java的开发者来说,也可以快速入手AI相关的开发了。 S…...

onlyoffice 源码 调试说明 -ARM和x86双模式安装支持
很多用户在调试onlyoffice源码最大的问题是如何搭建环境,这个难度很高,下面提供一键安装的方式,让普通用户也能快速调试源码。 OnlyOffice Document Server 基于源码运行的容器调试模式,凭借 Docker 容器化技术的核心优势,为开发者提供了跨平台、高兼容性…...

EXCEL在一列数据前统一添加负号
1.全选数据列 2.右键,设置单元格格式。输入-0,要保留三位小数就输入-0.000. 3.添加完成效果。...
从零开始打造个人主页:HTML/CSS/JS实战教程
本教程分为环境搭建、HTML 结构编写、CSS 样式布局、JavaScript 交互实现、部署上线等五大部分,覆盖从基础到进阶的核心知识点,并结合示例代码与最佳实践,帮助你快速上手并掌握前端开发基本技能。 介绍 个人主页是展示自我、分享作品的重要…...

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings
33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识…...

高等数学基础(牛顿/莱布尼茨公式)
牛顿/莱布尼茨公式主要是为定积分的计算提供了高效的方法, 其主要含义在于求积分的函数( f ( x ) f(x) f(x))连续时候总是存在一条积分面积的函数( F ( x ) F(x) F(x))与之对应, 牛顿莱布尼茨公式吧微分和积分联系了起来, 提供了这种高效计算积分面积的方法 参考视频理解: http…...
Node.js路径处理指南:如何安全获取当前脚本目录路径
本文适用于 Node.js 14.x及以上版本,同时覆盖 CommonJS 和 ES Modules 模块系统 文章目录 一、为什么需要关注路径问题?二、三种核心方法详解方法1:经典方案 __dirname (CommonJS)方法2:ES Modules 解决方案方法3:动态…...
RK3588 ArmNN CPU/GPU ResNet50 FP32/FP16/INT8 推理测试
RK3588 ArmNN CPU/GPU ResNet50 FP32/FP16/INT8 推理测试 **背景与目标** 一.性能数据【INT8模型在CPU上推理的结果已经不对,暂未分析原因】二.操作步骤2.1 在x86-Linux上生成onnx模型,以及tflite量化模型(避免在RK3588上安装过多依赖)2.1.1 创建容器2.1.2 安装依赖2.1.3 下载推…...

2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 华顺信安[实习]安全服务工程师 1. 自我介绍 2. 红蓝队经验 3. Shiro漏洞知识体系 4. APP渗透测试方法…...
按键精灵ios/安卓辅助工具高级函数OcrEx文字识别(增强版)脚本开发介绍
函数名称 OcrEx文字识别(增强版) 函数功能 返回指定区域内所有识别到的字符串、左上角坐标、区域宽高、可信度,无需自制字库,识别范围越小,效率越高,结果越准确 注意:安卓版按键APP需在设置…...
Unity3D HUD UI性能优化方案
前言 在Unity3D中实现高性能的HUD UI需要综合考虑渲染效率、CPU开销和内存管理。以下是分步的优化方案: 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀! 1. 降低Draw Call:合批与图集 …...

掌握Git:版本控制与高效协作指南
一、初始Git 提出问题:无论是在工作还是学习,我们在编写各种文档的时候,更改失误,失误后恢复到原来版本,不得不复制出一个副本。 每个版本由各自的内容,但最终只有一个报告需要被我们使用。 但在此之前的…...

VsCode和AI的前端使用体验:分别使用了Copilot、通义灵码、iflyCode和Trae
1、前言 大杂烩~每次开发一行代码,各个AI争先恐后抢着提供帮助 备注:四款插件都需要先去官网注册账号,安装好之后有个账号验证。 2、插件详解 2.1、AI分析的答案 GitHub Copilot 定位:老牌 AI 代码补全工具,深度集成…...
交叉熵损失函数,KL散度, Focal loss
目录 交叉熵损失函数(Cross-Entropy Loss) 二分类交叉熵 多分类交叉熵 KL散度(Kullback-Leibler Divergence) 交叉熵损失函数和KL散度总结 Focal loss Focal loss 和 交叉熵损失函数 的区别 交叉熵损失函数(Cross-Entropy…...
php、laravel框架下如何将一个png图片转化为jpg格式
要在 PHP 的 Laravel 框架下将 PNG 图片转化为 JPG 格式,可以使用两种方法:内置的 GD 库或第三方包 Intervention/image。 方法 1:使用 GD 库 GD 库是 PHP 内置的图像处理工具,无需额外安装即可使用。 实现步骤: 使…...
足式机器人经典控制常用的ROS库介绍
一. 核心工具 & 功能 1. ros-noetic-rosbash 作用: 提供与 ROS 相关的 Shell 命令(如 roscd, rosls, roscp 等),用于快速操作 ROS 包、节点和文件。 典型场景: 快速在终端中切换 ROS 工作空间、查看或复制 ROS 包内的文件。 2. ros-noet…...
在tp6模版中加减法
实际项目中,我们经常需要标签变量加减运算的操作。但是,在ThinkPHP中,并不支持模板变量直接运算的操作。幸运的是,它提供了自定义函数的方法,我们可以利用自定义函数解决:ThinkPHP模板自定义函数语法如下&a…...

【Part 3 Unity VR眼镜端播放器开发与优化】第一节|基于Unity的360°全景视频播放实现方案
《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化,以及高分辨率视频性能优化等实战技巧。 📝 希望通过这个专栏&am…...
Python打卡DAY30
知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) # 直接导入 from random import randint print(randint(1, 10)) # 导入自定义库 import modu…...

IDEA连接github(上传项目)
【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】 1.先配置好git环境。 没配置的小伙伴可以看上一篇文章教程。 安装git,2.49.0版本-CSDN博客 2.在idea设置git 打开IDEA设置-…...

重构研发效能:项目管理引领软件工厂迈向智能化
1.项目管理智能化,激活软件工厂新引擎 在高速发展的软件开发时代,企业如何高效管理多个项目、协调团队合作、优化资源配置,已成为推动技术进步的关键。尤其是在多任务、多项目并行的复杂环境下,智能项目组合管理工具正成为软件工…...
基于 STM32 单片机的实验室多参数安全监测系统设计与实现
一、系统总体设计 本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安…...

Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案
1、基础用法 父组件: <script setup> import { ref, provide } from vue; import ChildComponent from ./ChildComponent.vue; const parentData ref(初始数据); // 提供数据 provide(parentData, parentData); </script>子组件: <sc…...

小白的进阶之路系列之二----人工智能从初步到精通pytorch中分类神经网络问题详解
什么是分类问题? 分类问题涉及到预测某物是一种还是另一种。 例如,你可能想要: 问题类型具体内容例子二元分类目标可以是两个选项之一,例如yes或no根据健康参数预测某人是否患有心脏病。多类分类目标可以是两个以上选项之一判断一张照片是食物、人还是狗。多标签分类目标…...
Semaphore解决高并发场景下的有限资源的并发访问问题
在高并发编程的领域中,我们常常面临着对有限资源的激烈抢夺问题。而 Java 的 java.util.concurrent 包提供的 Semaphore ,为我们提供了精准控制对有限资源并发访问的强大能力。 一、Semaphore? Semaphore,直译为 “信号量”&#…...