http和https的了解

一、HTTP 核心解析

HTTP(HyperText Transfer Protocol,超文本传输协议)是客户端与服务器之间传输数据的应用层协议,是 Web 通信的基础。

1. HTTP 的核心特点

特点 说明 优势 / 问题
无状态 服务器不记录客户端的请求上下文,请求之间无关联 优势:轻量、高效;问题:需 Cookie/Session 等机制实现状态保持
无连接 HTTP/1.1 前每次请求新建 TCP 连接;1.1 引入持久连接(Keep-Alive) 优势:简化设计;问题:早期频繁建连消耗资源,1.1 已优化
明文传输 所有请求 / 响应数据均为纯文本,无加密处理 优势:易调试;问题:存在窃听、篡改风险,核心安全短板
灵活扩展 支持自定义请求头 / 响应头、请求方法(GET/POST/PUT 等) 优势:适配 RESTful API、文件上传等多场景
基于请求 - 响应模型 客户端发起请求 → 服务器返回响应,单向交互 优势:逻辑简单;问题:无法主动推送,需 WebSocket 补充
缓存友好 支持多缓存策略,通过头字段控制缓存行为 优势:减少请求次数、降低服务器负载、提升访问速度;问题:配置不当易导致数据不一致

2. HTTP 缓存核心机制

HTTP 缓存是客户端(浏览器)或中间代理服务器临时存储服务器返回的资源,后续请求相同资源时优先读取本地缓存的机制。

(1)缓存分类(按存储位置与优先级)
缓存类型 存储位置 优先级 核心特点
强缓存 浏览器本地磁盘 / 内存 最高 直接读取本地缓存,不向服务器发送请求
协商缓存 浏览器本地磁盘 / 内存 次高 向服务器发送请求,由服务器判断缓存是否有效
代理缓存 CDN、Nginx 等中间代理服务器 中等 为多个客户端提供缓存服务,降低源站压力
数据库缓存 服务器端数据库 属于服务器内部优化,非 HTTP 层面缓存
(2)强缓存(核心控制头字段)

强缓存是浏览器优先使用的本地缓存策略,服务器通过Cache-Control(主流)或Expires头字段,给资源设定有效期。有效期内,浏览器请求相同资源时,直接从本地读取,无需和服务器通信,既省流量又提速度。但弊端是,若服务器资源更新,浏览器因未请求,会继续使用旧缓存,适用于长期不变的静态资源(如图片、CSS)。

头字段 类型 格式 / 指令 作用说明
Expires 响应头(HTTP/1.0) 绝对时间(GMT 格式)例:Expires: Wed, 21 Oct 2026 07:28:00 GMT 浏览器对比本地时间与该时间,未过期则用缓存;依赖本地时间,易受时间篡改影响
Cache-Control 响应头(HTTP/1.1,推荐) 多指令组合例:Cache-Control: public, max-age=3600 用相对时间控制缓存,指令优先级高于 Expires
- max-age=N Cache-Control 子指令 N 为秒数 缓存有效期为响应返回后 N 秒
- public Cache-Control 子指令 - 允许浏览器、代理服务器等所有节点缓存
- private Cache-Control 子指令 - 仅允许浏览器缓存,禁止代理服务器缓存(如用户个人数据)
- no-cache Cache-Control 子指令 - 不使用强缓存,直接进入协商缓存流程
- no-store Cache-Control 子指令 - 禁止任何缓存,每次请求都从服务器获取新资源(如敏感数据)
(3)协商缓存(核心控制头字段)

协商缓存是强缓存过期后的备选方案,浏览器会携带资源标识(ETagLast-Modified)请求服务器。服务器对比标识,若资源未更新,返回304状态码,浏览器继续用本地缓存;若已更新,返回新资源和新标识。它兼顾性能与资源时效性,ETag基于内容哈希,比基于修改时间的Last-Modified精度更高,适合频繁更新的动态资源(如 HTML)。

头字段组 头字段类型 作用说明 交互流程
Last-Modified If-Modified-Since Last-Modified:响应头If-Modified-Since:请求头 基于文件最后修改时间判断缓存有效性,时间精度为秒级 1. 服务器返回资源时,通过 Last-Modified 携带最后修改时间2. 强缓存过期后,浏览器通过 If-Modified-Since 携带该时间请求服务器3. 服务器对比:未修改则返回 304 Not Modified;已修改则返回 200 OK + 新资源
ETag If-None-Match ETag:响应头If-None-Match:请求头 基于文件内容哈希值判断缓存有效性,内容变则哈希值变,精度更高 1. 服务器返回资源时,通过 ETag 携带资源唯一哈希值2. 强缓存过期后,浏览器通过 If-None-Match 携带该哈希值请求服务器3. 服务器对比:哈希一致则返回 304 Not Modified;不一致则返回 200 OK + 新资源
(4)缓存完整执行流程
  1. 浏览器请求资源 → 检查本地是否有缓存
    • 无缓存 → 发送请求到服务器 → 返回 200 OK + 资源 + 缓存头 → 存储缓存
    • 有缓存 → 检查强缓存是否过期
      • 未过期 → 直接使用本地缓存(状态码:200 from cache
      • 已过期 → 发送协商缓存请求到服务器
        • 服务器判断缓存有效 → 返回 304 Not Modified → 使用本地缓存
        • 服务器判断缓存无效 → 返回 200 OK + 新资源 + 新缓存头 → 更新缓存
(5)缓存实战配置建议
资源类型 缓存配置方案 配置目的
静态资源(CSS/JS/ 图片) Cache-Control: public, max-age=604800(7 天)+ 文件指纹(如 app.v2.js 长期缓存降低请求次数,文件更新时修改指纹触发新请求
动态页面(HTML) Cache-Control: no-cache 强制走协商缓存,保证页面实时性
敏感数据(用户订单 / 支付信息) Cache-Control: no-store 禁止任何缓存,每次请求都获取最新数据

3. HTTP 角色认证实现机制

HTTP 无状态,需通过请求头 / 响应头传递认证信息,实现服务器对用户身份的识别。

认证机制 核心逻辑 头字段示例 特点
Cookie + Session 服务器生成唯一 Session ID,通过响应头发给客户端;客户端后续请求通过请求头携带该 ID 响应头:Set-Cookie: JSESSIONID=abc123; Path=/; HttpOnly; Max-Age=3600请求头:Cookie: JSESSIONID=abc123 Session 存储在服务器,易受 CSRF 攻击;需配置 HttpOnly 防止 XSS 窃取 Cookie
Token 认证(JWT 为主) 服务器验证身份后生成加密 Token,返回给客户端;客户端请求时通过请求头携带 Token 请求头:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Token 存储在客户端,服务器无需存储,适合分布式系统;Token 泄露会导致身份冒用,需配合 HTTPS
Basic 认证 客户端将用户名和密码用 Base64 编码后,通过请求头传递 请求头:Authorization: Basic dXNlcjE6cGFzc3dvcmQ= 明文编码无加密,仅适用于测试 / 内网场景
OAuth2.0 第三方授权机制,通过授权码获取 Token,实现跨平台登录(如微信 / QQ 登录) 请求头:Authorization: Bearer [第三方授权 Token] 无需用户提供账号密码,安全性高;流程较复杂

4. HTTP 请求头 / 响应头核心分类

头字段分类 核心头字段 作用
身份认证 AuthorizationCookieSet-Cookie 传递认证信息,实现用户身份识别
缓存控制 Cache-ControlExpiresETagLast-ModifiedIf-None-MatchIf-Modified-Since 控制缓存策略,优化资源加载性能
内容协商 Content-TypeAccept Content-Type 声明响应体格式;Accept 声明客户端支持的格式
跨域控制 Access-Control-Allow-Origin 解决跨域请求问题,如 * 允许所有域名访问
连接控制 Connection 控制持久连接,如 Connection: Keep-Alive
安全防护 X-Content-Type-OptionsX-XSS-Protection 基础安全防护,无法解决明文传输问题

5. HTTP 核心缺陷(引出 HTTPS)

HTTP 明文传输的特性导致三大致命问题:

  1. 窃听风险:中间人可抓取数据包,获取账号密码、支付信息等敏感数据;
  2. 篡改风险:中间人可修改请求 / 响应内容(如篡改订单金额、植入恶意代码);
  3. 冒充风险:中间人可伪装成服务器(钓鱼网站),骗取用户数据。

二、HTTPS 核心解析

HTTPS 不是新协议,是 HTTP 运行在 SSL/TLS 加密层之上 的安全协议,核心目标是解决 HTTP 的安全缺陷。

1. HTTPS 核心改进

改进点 说明
加密传输 数据通过 SSL/TLS 加密后再传输,中间人无法解析明文
身份验证 服务器需部署 CA 签发的证书,客户端可验证服务器合法性,防止冒充
完整性校验 通过哈希算法校验数据,确保传输过程中未被篡改
缓存兼容 缓存逻辑与 HTTP 一致,缓存资源加密存储,更安全

2. HTTPS 连接建立过程(TCP 三次握手 + TLS 握手)

阶段 具体步骤 作用
阶段 1:TCP 三次握手 1. 客户端发送 SYN 报文 → 服务器2. 服务器返回 SYN+ACK 报文 → 客户端3. 客户端发送 ACK 报文 → 服务器 建立客户端与服务器的可靠 TCP 连接
阶段 2:TLS 握手(核心) 1. Client Hello:客户端发送支持的 TLS 版本、加密套件、随机数 1 协商加密规则,生成密钥的基础数据
2. Server Hello:服务器返回选定的 TLS 版本、加密套件、随机数 2 确认加密规则,补充密钥基础数据
3. 服务器发证书:服务器发送 CA 签发的证书(含公钥、CA 签名) 客户端验证服务器合法身份
4. Server Hello Done:服务器告知客户端 Hello 阶段结束 进入密钥协商阶段
5. 客户端验证证书:客户端向 CA 验证证书合法性,失败则终止连接 防止连接到钓鱼网站
6. 客户端发预主密钥:客户端生成预主密钥,用服务器公钥加密后发送 服务器用私钥解密,双方获取预主密钥
7. 生成会话密钥:双方通过「随机数 1 + 随机数 2 + 预主密钥」计算出会话密钥(对称加密密钥) 对称加密效率高,用于后续数据传输
8. 加密握手完成:客户端和服务器分别用会话密钥加密「握手完成」报文并发送 确认加密通信可用
阶段 3:加密数据传输 后续所有 HTTP 请求 / 响应数据,均通过会话密钥加密后传输 保证数据安全,防止窃听、篡改

3. HTTP 与 HTTPS 核心区别

对比维度 HTTP HTTPS
默认端口 80 443
传输方式 明文传输,无加密 SSL/TLS 加密传输
安全性 无身份验证、无完整性校验,存在窃听 / 篡改 / 冒充风险 加密传输、服务器身份验证、数据完整性校验
性能 无加解密开销,速度快 证书验证、加解密存在少量性能开销(可优化)
证书要求 无需证书 需 CA 签发的证书(免费 / 付费)
缓存机制 缓存资源易被篡改 缓存资源加密存储,更安全

HTTP(HyperText Transfer Protocol,超文本传输协议)是客户端与服务器之间传输数据的应用层协议,是 Web 通信的基础。

1. HTTP 的核心特点

特点 说明 优势 / 问题
无状态 服务器不记录客户端的请求上下文,请求之间无关联 优势:轻量、高效;问题:需 Cookie/Session 等机制实现状态保持
无连接 HTTP/1.1 前每次请求新建 TCP 连接;1.1 引入持久连接(Keep-Alive) 优势:简化设计;问题:早期频繁建连消耗资源,1.1 已优化
明文传输 所有请求 / 响应数据均为纯文本,无加密处理 优势:易调试;问题:存在窃听、篡改风险,核心安全短板
灵活扩展 支持自定义请求头 / 响应头、请求方法(GET/POST/PUT 等) 优势:适配 RESTful API、文件上传等多场景
基于请求 - 响应模型 客户端发起请求 → 服务器返回响应,单向交互 优势:逻辑简单;问题:无法主动推送,需 WebSocket 补充
缓存友好 支持多缓存策略,通过头字段控制缓存行为 优势:减少请求次数、降低服务器负载、提升访问速度;问题:配置不当易导致数据不一致

2. HTTP 缓存核心机制

HTTP 缓存是客户端(浏览器)或中间代理服务器临时存储服务器返回的资源,后续请求相同资源时优先读取本地缓存的机制。

(1)缓存分类(按存储位置与优先级)
缓存类型 存储位置 优先级 核心特点
强缓存 浏览器本地磁盘 / 内存 最高 直接读取本地缓存,不向服务器发送请求
协商缓存 浏览器本地磁盘 / 内存 次高 向服务器发送请求,由服务器判断缓存是否有效
代理缓存 CDN、Nginx 等中间代理服务器 中等 为多个客户端提供缓存服务,降低源站压力
数据库缓存 服务器端数据库 属于服务器内部优化,非 HTTP 层面缓存
(2)强缓存(核心控制头字段)

强缓存是浏览器优先使用的本地缓存策略,服务器通过Cache-Control(主流)或Expires头字段,给资源设定有效期。有效期内,浏览器请求相同资源时,直接从本地读取,无需和服务器通信,既省流量又提速度。但弊端是,若服务器资源更新,浏览器因未请求,会继续使用旧缓存,适用于长期不变的静态资源(如图片、CSS)。

头字段 类型 格式 / 指令 作用说明
Expires 响应头(HTTP/1.0) 绝对时间(GMT 格式)例:Expires: Wed, 21 Oct 2026 07:28:00 GMT 浏览器对比本地时间与该时间,未过期则用缓存;依赖本地时间,易受时间篡改影响
Cache-Control 响应头(HTTP/1.1,推荐) 多指令组合例:Cache-Control: public, max-age=3600 用相对时间控制缓存,指令优先级高于 Expires
- max-age=N Cache-Control 子指令 N 为秒数 缓存有效期为响应返回后 N 秒
- public Cache-Control 子指令 - 允许浏览器、代理服务器等所有节点缓存
- private Cache-Control 子指令 - 仅允许浏览器缓存,禁止代理服务器缓存(如用户个人数据)
- no-cache Cache-Control 子指令 - 不使用强缓存,直接进入协商缓存流程
- no-store Cache-Control 子指令 - 禁止任何缓存,每次请求都从服务器获取新资源(如敏感数据)
(3)协商缓存(核心控制头字段)

协商缓存是强缓存过期后的备选方案,浏览器会携带资源标识(ETagLast-Modified)请求服务器。服务器对比标识,若资源未更新,返回304状态码,浏览器继续用本地缓存;若已更新,返回新资源和新标识。它兼顾性能与资源时效性,ETag基于内容哈希,比基于修改时间的Last-Modified精度更高,适合频繁更新的动态资源(如 HTML)。

头字段组 头字段类型 作用说明 交互流程
Last-Modified If-Modified-Since Last-Modified:响应头If-Modified-Since:请求头 基于文件最后修改时间判断缓存有效性,时间精度为秒级 1. 服务器返回资源时,通过 Last-Modified 携带最后修改时间2. 强缓存过期后,浏览器通过 If-Modified-Since 携带该时间请求服务器3. 服务器对比:未修改则返回 304 Not Modified;已修改则返回 200 OK + 新资源
ETag If-None-Match ETag:响应头If-None-Match:请求头 基于文件内容哈希值判断缓存有效性,内容变则哈希值变,精度更高 1. 服务器返回资源时,通过 ETag 携带资源唯一哈希值2. 强缓存过期后,浏览器通过 If-None-Match 携带该哈希值请求服务器3. 服务器对比:哈希一致则返回 304 Not Modified;不一致则返回 200 OK + 新资源
(4)缓存完整执行流程
  1. 浏览器请求资源 → 检查本地是否有缓存
    • 无缓存 → 发送请求到服务器 → 返回 200 OK + 资源 + 缓存头 → 存储缓存
    • 有缓存 → 检查强缓存是否过期
      • 未过期 → 直接使用本地缓存(状态码:200 from cache
      • 已过期 → 发送协商缓存请求到服务器
        • 服务器判断缓存有效 → 返回 304 Not Modified → 使用本地缓存
        • 服务器判断缓存无效 → 返回 200 OK + 新资源 + 新缓存头 → 更新缓存
(5)缓存实战配置建议
资源类型 缓存配置方案 配置目的
静态资源(CSS/JS/ 图片) Cache-Control: public, max-age=604800(7 天)+ 文件指纹(如 app.v2.js 长期缓存降低请求次数,文件更新时修改指纹触发新请求
动态页面(HTML) Cache-Control: no-cache 强制走协商缓存,保证页面实时性
敏感数据(用户订单 / 支付信息) Cache-Control: no-store 禁止任何缓存,每次请求都获取最新数据

3. HTTP 角色认证实现机制

HTTP 无状态,需通过请求头 / 响应头传递认证信息,实现服务器对用户身份的识别。

认证机制 核心逻辑 头字段示例 特点
Cookie + Session 服务器生成唯一 Session ID,通过响应头发给客户端;客户端后续请求通过请求头携带该 ID 响应头:Set-Cookie: JSESSIONID=abc123; Path=/; HttpOnly; Max-Age=3600请求头:Cookie: JSESSIONID=abc123 Session 存储在服务器,易受 CSRF 攻击;需配置 HttpOnly 防止 XSS 窃取 Cookie
Token 认证(JWT 为主) 服务器验证身份后生成加密 Token,返回给客户端;客户端请求时通过请求头携带 Token 请求头:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Token 存储在客户端,服务器无需存储,适合分布式系统;Token 泄露会导致身份冒用,需配合 HTTPS
Basic 认证 客户端将用户名和密码用 Base64 编码后,通过请求头传递 请求头:Authorization: Basic dXNlcjE6cGFzc3dvcmQ= 明文编码无加密,仅适用于测试 / 内网场景
OAuth2.0 第三方授权机制,通过授权码获取 Token,实现跨平台登录(如微信 / QQ 登录) 请求头:Authorization: Bearer [第三方授权 Token] 无需用户提供账号密码,安全性高;流程较复杂

4. HTTP 请求头 / 响应头核心分类

头字段分类 核心头字段 作用
身份认证 AuthorizationCookieSet-Cookie 传递认证信息,实现用户身份识别
缓存控制 Cache-ControlExpiresETagLast-ModifiedIf-None-MatchIf-Modified-Since 控制缓存策略,优化资源加载性能
内容协商 Content-TypeAccept Content-Type 声明响应体格式;Accept 声明客户端支持的格式
跨域控制 Access-Control-Allow-Origin 解决跨域请求问题,如 * 允许所有域名访问
连接控制 Connection 控制持久连接,如 Connection: Keep-Alive
安全防护 X-Content-Type-OptionsX-XSS-Protection 基础安全防护,无法解决明文传输问题

5. HTTP 核心缺陷(引出 HTTPS)

HTTP 明文传输的特性导致三大致命问题:

  1. 窃听风险:中间人可抓取数据包,获取账号密码、支付信息等敏感数据;
  2. 篡改风险:中间人可修改请求 / 响应内容(如篡改订单金额、植入恶意代码);
  3. 冒充风险:中间人可伪装成服务器(钓鱼网站),骗取用户数据。

二、HTTPS 核心解析

HTTPS 不是新协议,是 HTTP 运行在 SSL/TLS 加密层之上 的安全协议,核心目标是解决 HTTP 的安全缺陷。

1. HTTPS 核心改进

改进点 说明
加密传输 数据通过 SSL/TLS 加密后再传输,中间人无法解析明文
身份验证 服务器需部署 CA 签发的证书,客户端可验证服务器合法性,防止冒充
完整性校验 通过哈希算法校验数据,确保传输过程中未被篡改
缓存兼容 缓存逻辑与 HTTP 一致,缓存资源加密存储,更安全

2. HTTPS 连接建立过程(TCP 三次握手 + TLS 握手)

阶段 具体步骤 作用
阶段 1:TCP 三次握手 1. 客户端发送 SYN 报文 → 服务器2. 服务器返回 SYN+ACK 报文 → 客户端3. 客户端发送 ACK 报文 → 服务器 建立客户端与服务器的可靠 TCP 连接
阶段 2:TLS 握手(核心) 1. Client Hello:客户端发送支持的 TLS 版本、加密套件、随机数 1 协商加密规则,生成密钥的基础数据
2. Server Hello:服务器返回选定的 TLS 版本、加密套件、随机数 2 确认加密规则,补充密钥基础数据
3. 服务器发证书:服务器发送 CA 签发的证书(含公钥、CA 签名) 客户端验证服务器合法身份
4. Server Hello Done:服务器告知客户端 Hello 阶段结束 进入密钥协商阶段
5. 客户端验证证书:客户端向 CA 验证证书合法性,失败则终止连接 防止连接到钓鱼网站
6. 客户端发预主密钥:客户端生成预主密钥,用服务器公钥加密后发送 服务器用私钥解密,双方获取预主密钥
7. 生成会话密钥:双方通过「随机数 1 + 随机数 2 + 预主密钥」计算出会话密钥(对称加密密钥) 对称加密效率高,用于后续数据传输
8. 加密握手完成:客户端和服务器分别用会话密钥加密「握手完成」报文并发送 确认加密通信可用
阶段 3:加密数据传输 后续所有 HTTP 请求 / 响应数据,均通过会话密钥加密后传输 保证数据安全,防止窃听、篡改

3. HTTP 与 HTTPS 核心区别

对比维度 HTTP HTTPS
默认端口 80 443
传输方式 明文传输,无加密 SSL/TLS 加密传输
安全性 无身份验证、无完整性校验,存在窃听 / 篡改 / 冒充风险 加密传输、服务器身份验证、数据完整性校验
性能 无加解密开销,速度快 证书验证、加解密存在少量性能开销(可优化)
证书要求 无需证书 需 CA 签发的证书(免费 / 付费)
缓存机制 缓存资源易被篡改 缓存资源加密存储,更安全
相关推荐
Evand J2 小时前
计算机四级——《网络工程》科目,易错点总结【纯手工总结】
网络协议·网络安全·网络工程·计算机四级
特立独行的猫a2 小时前
ESP32小智AI的WebSocket 调试工具的实现,小智AI后台交互过程揭秘(二、技术原理与实现过程详解 )
人工智能·websocket·网络协议·esp32·调试工具·小智ai
灰子学技术2 小时前
自定义 Host 头访问 HTTPS 服务时的网关处理逻辑
网络·网络协议·http·https
甘露s2 小时前
从明文到加密:HTTP 与 HTTPS 的本质区别与建立全解析
网络协议·http·https
虾..2 小时前
IP 协议
网络·网络协议·tcp/ip
倔强的石头1062 小时前
技术拆解:P2P组网如何一键远程AI
人工智能·网络协议·p2p
以太浮标10 小时前
华为eNSP模拟器综合实验之- ACL控制列表核心命令全解析及场景应用
运维·网络·网络协议·华为·信息与通信
yosh'joy!!10 小时前
IT/OT接口规范
网络协议·接口·modbus tcp·modbus rtu
mftang16 小时前
WebSocket 通信协议详细解析
网络·websocket·网络协议