HTTP与HTTPS
HTTP协议概述
- HTTP(超文本传输协议):工作在OSI顶层应用层,用于客户端(浏览器)与服务器之间的通信,B/S模式
- 无状态:每次请求独立,服务器不保存客户端状态(通过Cookie/Session扩展状态管理)。
- 基于TCP:默认端口80(HTTP)、443(HTTPS),保证可靠传输。
- 请求-响应模型:客户端发起请求,服务器返回响应。
HTTP协议工作方式
- 建立TCP连接:客户端与服务器通过三次握手建立TCP连接。
- 发送HTTP请求:客户端构造HTTP请求报文并发送。
- 服务器处理请求:服务器解析请求,执行逻辑,生成响应。
- 返回HTTP响应:服务器构造响应报文并返回。
- 关闭TCP连接:默认HTTP/1.1使用持久连接(
Connection: keep-alive
),可复用连接。
HTTP报文格式
-
HTTP报文分为请求报文和应答报文,均由起始行、首部字段、空行和实体主体(可选)组成
-
HTTP request
GET /index.html HTTP/1.1 //起始行:方法+URL+协议版本 Host: www.example.com //首部字段:客户端、请求参数 User-Agent: Mozilla/5.0 Content-Type: application/x-www-form-urlencoded username=admin&password=123 //实体主体:get、post等方法携带的参数
-
HTTP response
HTTP/1.1 200 OK //起始行:协议版本+状态码 Content-Type: text/html //首部字段:服务器信息、响应参数等 Content-Length: 1234 Set-Cookie: sessionid=abc123 <html>...</html> //实体主体:返回的数据HTML/json等
HTTP请求方法(函数体)
- get(安全,幂等,url可见):获取资源
- post(不安全,不幂等):提交数据,参数在请求体中(表单)
- put(幂等,不安全):更新资源
- delete(幂等,不安全):删除资源
HTTP状态码
- 1XX:信息类状态码,100继续发送请求体
- 2XX:成功状态码,200请求成功
- 3XX:重定向状态码,301/302资源永久重定向
- 4XX:客户端错误,401未授权须身份验证;403服务器拒绝请求(权限不足);404资源不存在(隐藏资源),
- 5XX:服务器错误,500服务器内部错误
HTTP历史演变
- HTTP/1.1:支持持久连接,管道化
- HTTP/2.0:二进制分帧,多路复用,首部压缩
- HTTP/3.0:基于UDP的QUIC协议,减少延迟
HTTPS(安全通信)
-
HTTPS通信特性:
- 数据机密性:防止数据传输过程中被窃听
- 数据完整性:防止数据在传输过程中被篡改
- 身份验证:确认服务器(及客户端)身份真实性,避免中间人攻击,依赖数字证书和CA(证书颁发机构)
- 不可否认性:通过数字签名实现行为可回溯
-
对称加密与非对称加密:
- 对称加密(如AES、ChaCha20):
- 特点:加密与解密使用同一密钥,速度快,适合大数据传输。
- 问题:密钥分发需安全通道,否则可能被截获。
- 非对称加密(如RSA、ECC):
- 特点:公钥加密、私钥解密,解决密钥分发问题,但速度慢(比对称加密慢1000倍以上)。
- 用途:主要用于交换对称密钥或数字签名。
- 对称加密(如AES、ChaCha20):
-
HTTP优缺点:
- 优点:数据加密,防窃听与篡改;支持HTTP/2、HTTP/3现代协议,提升网站性能
- 缺点:需购买和维护SSL/TLS证书;解密加密消耗额外CPU资源;握手延迟增加(可通过TLS 1.3优化)
-
HTTP与HTTPS
-
TLS 1.3握手过程
- ClientHello(客户端问候)
- 发送支持的 TLS 版本
- 列出加密套件(如 ECDHE-RSA-AES256-GCM-SHA384)
- 生成随机数(Client Random)
- ServerHello(服务器响应)
- 选择 TLS 版本和加密套件
- 发送服务器证书(含公钥)
- 生成随机数(Server Random)
- 密钥交换
- 客户端使用服务器公钥加密 “预主密钥”
- 双方通过 Client Random + Server Random + 预主密钥生成对称会话密钥
- 身份验证
- 客户端验证证书有效性(检查 CA 签名、有效期、CN 是否匹配)
- 服务器验证客户端证书(可选双向认证)
- 加密通信
- 使用对称密钥加密后续数据
- 通过 HMAC 保证数据完整性
- ClientHello(客户端问候)