HTTP 和 HTTPS 详解(原理 + 区别 + 面试重点)

一、HTTP 是什么

  1. 定义

    HTTP(HyperText Transfer Protocol)是超文本传输协议,用于浏览器和服务器之间的数据通信。

  2. 特点

    (1)无状态:每次请求互不关联

    (2)明文传输:数据不加密

    (3)基于 TCP 协议

  3. 工作流程

客户端发送请求,服务器返回响应,例如:

GET /index.html HTTP/1.1

Host: example.com


二、HTTP 的问题

  1. 数据是明文

    传输过程中可以被直接读取,例如账号密码

  2. 数据容易被篡改

    中间人可以修改请求或响应内容

  3. 无法验证身份

    客户端无法确认服务器是否真实


三、HTTPS 是什么

  1. 定义

    HTTPS 是在 HTTP 基础上加入 SSL/TLS 加密层的安全协议

  2. 本质

    HTTPS = HTTP + 加密 + 认证 + 完整性校验


四、HTTPS 的核心原理

  1. 加密机制

(1)对称加密

使用同一个密钥加密和解密,速度快,但密钥传输不安全

(2)非对称加密

使用公钥和私钥,公钥加密,私钥解密,解决密钥传输问题

(3)混合加密(重点)

HTTPS 实际采用混合加密

握手阶段使用非对称加密

数据传输阶段使用对称加密


  1. 身份认证

通过数字证书验证服务器身份

证书由 CA(证书颁发机构)签发


  1. 完整性校验

使用摘要算法(如 SHA)确保数据未被篡改


五、HTTPS 握手流程(重点)

  1. 客户端发起 HTTPS 请求

  2. 服务器返回数字证书(包含公钥)

  3. 客户端验证证书是否合法

  4. 客户端生成随机密钥

  5. 使用公钥加密该密钥并发送给服务器

  6. 服务器用私钥解密得到密钥

  7. 双方使用该密钥进行对称加密通信

一句话总结:先用非对称加密交换密钥,再用对称加密传输数据


六、HTTP 和 HTTPS 的区别

  1. 安全性

    HTTP 不安全,HTTPS 安全

  2. 是否加密

    HTTP 明文传输,HTTPS 加密传输

  3. 端口

    HTTP 使用 80 端口,HTTPS 使用 443 端口

  4. 性能

    HTTP 稍快,HTTPS 略慢(实际差异很小)

  5. 证书

    HTTP 不需要证书,HTTPS 需要证书

  6. SEO

    HTTPS 更有利于搜索排名


七、HTTPS 的优缺点

  1. 优点

(1)数据加密,防止窃听

(2)验证服务器身份

(3)防止数据篡改

(4)提升网站可信度

  1. 缺点

(1)需要申请证书

(2)握手过程略有性能开销

(3)部署比 HTTP 更复杂


八、HTTP/2 与 HTTPS

  1. HTTP/2 特点

(1)多路复用

(2)头部压缩

(3)服务器推送

  1. 关系

主流浏览器中 HTTP/2 基本都运行在 HTTPS 上


九、常见安全问题

  1. 中间人攻击

    攻击者拦截通信并伪造服务器

HTTPS 通过证书和加密进行防护

  1. 抓包攻击

    HTTP 可以直接看到数据

    HTTPS 数据是加密的

  2. DNS 劫持

    需要结合 HSTS 等机制防护


十、开发中的最佳实践

  1. 全站使用 HTTPS

  2. 配置 HSTS 强制使用 HTTPS

Strict-Transport-Security: max-age=31536000

  1. 禁用不安全协议

    如 SSL 3.0

  2. Cookie 设置安全属性

Secure 和 HttpOnly

  1. 配合认证机制

    HTTPS 不能替代登录认证(如 Token、Session)


十一、面试高频问题

  1. HTTP 和 HTTPS 的核心区别

    是否加密,是否安全,是否需要证书

  2. HTTPS 为什么安全

    因为使用混合加密、数字证书和完整性校验

  3. HTTPS 握手过程

    重点记住七个步骤

  4. 为什么不用全程非对称加密

    因为性能太低

  5. HTTPS 一定安全吗

    不一定,例如用户忽略证书警告或终端被攻击


十二、总结

  1. HTTP 是明文传输协议,不安全

  2. HTTPS 在 HTTP 基础上增加了加密和认证机制

  3. HTTPS 通过混合加密解决了安全与性能问题

  4. 在现代开发中,应优先使用 HTTP。

相关推荐
ControlRookie8 小时前
第04篇_把 HTTP 放进 PLC:扫描周期、缓冲区、状态机和能力边界
http·codesys·plc通信
記億揺晃着的那天9 小时前
HTTPS 页面内网直连 NAS:解决 Mixed Content 与公网带宽瓶颈
网络协议·http·https·nas
风栖柳白杨9 小时前
【面试】职位要求_准备
面试·职场和发展
Assby10 小时前
为什么我不建议你在 MySQL 里写 `IN (超过1000个ID)`?从 AST 解析到存储引擎的深度拆解
后端·面试
難釋懷10 小时前
Nginx代理https请求
redis·nginx·https
触底反弹1 天前
🚀 从 DOM0 级到 React 合成事件:前端事件监听的 20 年演进史
前端·react.js·面试
kyriewen1 天前
我给前端项目的接口请求套了6层保护——才发现以前一直在裸奔
前端·javascript·面试
wdfk_prog1 天前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
LayZhangStrive1 天前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
程序员清风1 天前
OpenAI官方发布最新提示词技巧!
java·后端·面试