目录
[1. HTTP (超文本传输协议)](#1. HTTP (超文本传输协议))
[2. HTTPS (基于 TLS/SSL 的 HTTP)](#2. HTTPS (基于 TLS/SSL 的 HTTP))
[3. HTTP 与 HTTPS 核心区别总结](#3. HTTP 与 HTTPS 核心区别总结)
1. HTTP (超文本传输协议)
-
定义: 一种用于在 Web 浏览器和 Web 服务器之间传输超文本(如 HTML 页面)和其他资源的应用层协议。
-
工作原理 (文字示意图):
[ 浏览器 ] ------------ 明文 HTTP 请求 (GET /index.html) ------------> [ Web 服务器 ] [ 浏览器 ] <------------ 明文 HTTP 响应 (HTML 内容) ----------------- [ Web 服务器 ]- 步骤:
- 建立 TCP 连接: 浏览器通过目标服务器的 IP 地址和端口号(默认 80)建立一个到 Web 服务器的 TCP 连接。这是数据传输的基础通道。
- 发送 HTTP 请求: 浏览器通过这个 TCP 连接,以明文形式发送一个 HTTP 请求报文给服务器。请求中包含方法(如
GET、POST)、请求的资源路径(如/index.html)、HTTP 版本、请求头(包含浏览器信息、接受的响应类型等)。 - 服务器处理请求: 服务器收到请求后,解析请求内容,根据请求的资源路径找到对应的文件或执行相应的处理逻辑。
- 发送 HTTP 响应: 服务器通过同一个 TCP 连接,以明文形式发送一个 HTTP 响应报文回浏览器。响应中包含状态码(如
200 OK、404 Not Found)、响应头(包含服务器信息、内容类型、长度等)、响应体(如 HTML 文件内容)。 - 关闭连接 (或保持): 根据 HTTP 版本和头信息,TCP 连接可能被关闭(HTTP/1.0 默认),也可能保持打开用于后续请求(HTTP/1.1 默认的持久连接)。
- 关键特点:
- 明文传输: 请求和响应的内容都是未加密的,任何在传输路径上的中间节点(如路由器、防火墙、ISP)都可以看到传输的数据(密码、信用卡号、个人信息等)。
- 无身份验证: 无法验证通信对方的真实身份。你访问的
www.bank.com可能是一个假冒的服务器。 - 无数据完整性保护: 传输的数据可能在途中被篡改,而通信双方无法察觉。
- 步骤:
2. HTTPS (基于 TLS/SSL 的 HTTP)
-
定义: HTTP 的安全版本。它在 HTTP 和 TCP 层之间增加了一个 TLS/SSL 协议层(现在通常指 TLS)。
-
核心目标:
- 加密 (Confidentiality): 传输的数据被加密,防止被窃听。
- 身份认证 (Authentication): 通过数字证书验证服务器的身份(有时也验证客户端)。
- 数据完整性 (Integrity): 确保数据在传输过程中未被篡改。
-
工作原理 (文字示意图):
[ 浏览器 ] ------------ TCP 连接 (端口 443) ------------> [ Web 服务器 ] [ 浏览器 ] <==== TLS/SSL 握手 (协商密钥、验证证书) ====> [ Web 服务器 ] [ 浏览器 ] ------------ 加密的 HTTP 请求 --------------> [ Web 服务器 ] [ 浏览器 ] <------------- 加密的 HTTP 响应 ------------ [ Web 服务器 ]- 步骤:
- 建立 TCP 连接: 浏览器连接到服务器的 443 端口(HTTPS 默认端口),建立 TCP 连接。
- TLS/SSL 握手: 这是 HTTPS 安全性的核心。在握手阶段:
- 协商协议版本和加密套件: 客户端和服务器互相告知支持的 TLS 版本和可用的加密算法组合(包括密钥交换算法、对称加密算法、散列算法)。
- 服务器身份验证 (核心): 服务器将其 数字证书 发送给客户端。证书包含服务器的公钥、域名、有效期、颁发机构 (CA) 等信息。
- 客户端验证证书: 浏览器使用其内置或操作系统信任的 根证书颁发机构 (Root CA) 的公钥,验证服务器证书的签名链是否可信。同时检查证书是否过期、域名是否匹配等。
- 密钥交换: 验证通过后,客户端生成一个 预主密钥 ,用服务器的公钥加密后发送给服务器(或使用其他密钥交换算法如
ECDHE)。服务器用自己的私钥解密得到预主密钥。 - 生成会话密钥: 客户端和服务器利用预主密钥、交换过程中的随机数等,独立计算出相同的 对称会话密钥。这个密钥将用于后续通信的加密和解密。
- 握手完成: 双方交换加密后的握手完成消息,确认握手成功,后续通信将使用会话密钥进行加密。
- 发送加密的 HTTP 请求: 浏览器通过已建立的 TLS 通道(在 TCP 之上),将 HTTP 请求报文用会话密钥加密后发送给服务器。
- 服务器处理请求: 服务器使用相同的会话密钥解密请求,处理请求内容。
- 发送加密的 HTTP 响应: 服务器将 HTTP 响应报文用会话密钥加密后,通过 TLS 通道发送回浏览器。
- 浏览器解密响应: 浏览器使用会话密钥解密响应,渲染页面。
- 关闭连接: 通信结束后,关闭 TCP 连接。会话密钥通常只用于当前连接(会话)。
- 关键特点:
- 加密传输: 所有 HTTP 数据在 TLS 层被加密,中间节点无法看到明文内容。
- 服务器身份认证: 通过数字证书机制,浏览器可以确认它连接的是拥有该域名合法证书的真实服务器,防止中间人攻击。
- 数据完整性保护: TLS 使用消息认证码 (MAC) 等技术,确保数据在传输过程中未被篡改。
- 性能开销: 建立连接时的握手过程需要额外的计算和通信开销(证书验证、密钥协商),以及后续通信的加密/解密操作。现代硬件和协议优化(如 TLS 1.3)已显著降低了这种开销。
- 步骤:
3. HTTP 与 HTTPS 核心区别总结
| 特性 | HTTP | HTTPS |
|---|---|---|
| 协议 | 应用层协议 | HTTP + TLS/SSL (应用层 + 安全层) |
| 默认端口 | 80 | 443 |
| 传输方式 | 明文 | 加密 |
| 安全性 | 无加密、无认证、无完整性保护 | 加密传输、服务器认证、数据完整性保护 |
| 性能开销 | 低 | 较高 (握手阶段) |
| URL前缀 | http:// |
https:// |
| 浏览器标识 | 无特殊标识 | 地址栏通常显示锁图标 |
图解关键点
- HTTP 风险点: 在浏览器到服务器的路径上,明文数据暴露给所有中间节点。
- HTTPS 安全点:
- 证书信任链: 浏览器信任的 Root CA -> 签发服务器证书的 Intermediate CA -> 服务器证书。浏览器验证证书签名链。
- 加密通道: TLS 握手协商出的会话密钥加密了所有后续的 HTTP 通信。
希望以上解释和示意图能帮助您清晰理解 HTTP 和 HTTPS 的工作原理与区别!