HTTP
基础
HTTP 超文本传输协议 ,应用层协议。主要用于 Web 上传输超媒体文本的底层协议,经常在浏览器和服务器之间传递数据。通信就是以纯文本的形式进行。
HTTP 是无状态
无状态是 HTTP 协议对客户端请求状态没有进行存储,比如每次请求都需要重新登录
HTTP 是无连接
无连接主要是限制每次连接只处理一个请求。每次请求都是客户发起请求,服务端响应请求,然后就断开连接。这期间就是通过三次握手建立连接,四次挥手断开连接。每次请求即便是多次请求并请求同一个资源,服务端都无法判断是否是相同请求,都需要重新响应请求。
所以,为了解决客户端和服务端保持会话连接,通过 cookie 和 session 来记录 http 状态。
HTTP 的其他特点是简单快速,只需传送方法和路径就可以向服务端进行请求;还有支持传输任意类型的数据对象。
HTTPS
基础
https 是 http 的“升级”版本:
HTTPS = HTTP+ SSL/TLS
SSL 是安全层,TLS 是传输层安全,是SSL 的继承。使用SSL或TLS 可确保传输数据的安全性。
使用 HTTP 可能看到传输数据是: “这是明文信息”
使用 HTTPS 可能看到: “283hd9saj9cdsncihquhs99ndso”
HTTPS 传输的不再是文本,而是二进制流,使得传输更高效,且加密处理更加安全。
HTTPS 的工作流程
1、客户端请求 HTTPS 请求并连接到服务器的 443 端口,此过程和请求 HTTP 请求一样,进行三次握手;
2、服务端向客户端发送数字证书,其中包含公钥、证书颁发者、到期日期
现比较流行的加解密码对,即公钥和私钥。公钥用于加密,私钥用于解密。所以服务端会保留私钥,然后发送公钥给客户端。
3、客户端收到证书,会验证证书的有效性。验证通过后会生成一个随机的 pre-master key。再将密钥通过接收到的公钥加密然后发送给服务端
4、服务端接收后使用私钥进行解密得到 pre-master key
5、获得 pre-master key 后,服务器和客户端可以使用主密钥进行通信。
HTTP 与 HTTPS 区别
所以在回答 HTTP 与 HTTPS 的区别的问题,可以从下面几个方面进行回答:
- 加密: HTTPS 是 HTTP 协议的更加安全的版本,通过使用SSL/TLS进行加密传输的数据;
- 连接方式: HTTP(三次握手)和 HTTPS (三次握手+数字证书)连接方式不一样;
- 端口: HTTP 默认的端口是 80和 HTTPS 默认端口是 443
HTTP2 是什么?
HTTP/2 超文本传输协议第2版,是 HTTP/1.x 的扩展。所以 HTTP/2没有改动HTTP的应用语义,仍然使用HTTP的请求方法、状态码和头字段等规则。
它主要修改了HTTP的报文传输格式,通过引入二进制分帧层实现性能的提升。
现有很多主流浏览器的 HTTPS/2 的实现都是基于SSL/TLS的,所以基于 SSL/TLS 的 HTTP/2 连接建立过程和 HTTPS 差不多。在建立连接过程中会携带标识期望使用 HTTP/2 协议,服务端同样方式回应。
常见考点
一、基础概念类
| 考点 | 说明 |
|---|---|
| HTTP 是什么? | 超文本传输协议,无状态、明文传输 |
| HTTPS 是什么? | 在 HTTP 上加入 TLS/SSL 加密的安全协议 |
| HTTP 和 HTTPS 的端口号 | HTTP 默认 80,HTTPS 默认 443 |
二、HTTP 与 HTTPS 的区别
| 维度 | 区别点 |
|---|---|
| 安全性 | HTTP 明文传输,HTTPS 加密传输(TLS) |
| 证书机制 | HTTPS 需要数字证书(CA签发) |
| 性能 | HTTPS 初次连接需 TLS 握手,耗时更长,但可启用 HTTP/2 |
| SEO | 搜索引擎优先抓取 HTTPS 页面 |
| 防劫持 | HTTPS 可防止运营商插入广告,防止中间人攻击 |
三、HTTPS 的加密原理
| 考点 | 说明 |
|---|---|
| 对称加密 | 传输数据(快,但密钥要安全传输) |
| 非对称加密 | 用于传输对称密钥(RSA,较慢) |
| TLS/SSL 握手流程 | 客户端发起请求 → 服务端返回证书 → 协商加密套件 → 建立安全连接 |
| 数字证书 | 验证服务端身份,防止钓鱼网站 |
四、HTTP 演进相关
| 考点 | 说明 |
|---|---|
| HTTP/1.0、1.1 | 1.1 支持长连接(keep-alive)、分块传输、缓存机制更完善 |
| HTTP/2 | 多路复用、首部压缩、服务器推送,提高性能 |
| HTTP/3 | 基于 QUIC 协议,减少握手延迟,适合弱网环境 |
| HTTPS 与 HTTP/2 的关系 | HTTP/2 强制使用 HTTPS |
五、常见安全问题
| 问题 | HTTPS 处理情况 |
|---|---|
| 中间人攻击 | HTTPS 可防止,数据加密且验证证书 |
| DNS 劫持 | 仍可能发生,HTTPS 无法防止 DNS 被篡改,但 DoH 可以解决 |
| 数据篡改 | HTTPS 提供完整性验证(MAC)防止篡改 |
六、证书相关
| 考点 | 说明 |
|---|---|
| CA 机构 | 签发数字证书的权威机构 |
| 自签名证书 | 浏览器会报不可信 |
| 证书包含内容 | 公钥、域名、有效期、颁发者、指纹等 |
| 浏览器信任机制 | 通过内置的 CA 根证书链进行验证 |
七、实际开发中相关问题
| 问题 | 说明 |
|---|---|
| HTTPS 页面中使用 HTTP 资源(混合内容) | 浏览器会警告或阻止加载 |
| 前后端接口跨域问题 | HTTPS 与 HTTP 跨协议时需注意 CORS 和 HSTS 配置 |
| HSTS | 强制浏览器使用 HTTPS 访问 |
| 使用 HTTPS 后访问变慢 | TLS 握手耗时,可通过缓存连接、启用 HTTP/2、优化证书链来缓解 |
八、扩展:HTTPS 优化技巧(高阶)
| 技巧 | 说明 |
|---|---|
| 使用 CDN 加速 HTTPS | 减少跨地区 TLS 握手延迟 |
| TLS 会话缓存(Session Resumption) | 提高复用率,减少重新握手 |
| OCSP Stapling | 减少证书状态验证的 RTT |
| 启用 ALPN 协商 | 支持 HTTP/2/3 的前提 |