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。

相关推荐
发现一只大呆瓜2 小时前
Vite 开发预构建机制详解,搞懂 esbuild 与 Rollup 分工差异
前端·面试·vite
计算机魔术师2 小时前
【AI面试八股文 Vol.3.4:训练微调部署选型】从预训练到量化部署:LLM 工程落地如何做模型选择
人工智能·后端·面试·架构·moe·vol.3.3·vol.3.4
Cosolar4 小时前
收藏备用!2026 年所有主流 RAG 开源项目都在这里了
人工智能·面试·llm
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题 第69题】【JVM篇】第29题:GC Roots 有哪些?
java·开发语言·jvm·面试
图码5 小时前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组
plainGeekDev6 小时前
Kotlin核心:空安全都搞不明白,还敢说熟练Kotlin?
android·面试·kotlin
Cosolar7 小时前
从零搭建本地 RAG 系统:LangChain + LM Studio 完整实战指南
人工智能·后端·面试
罗超驿7 小时前
20.MySQL事务隔离级别示例详解(脏读、不可重复读、幻读)
java·数据库·mysql·面试
mCell7 小时前
JavaScript:从事件循环到手写 Promise
javascript·面试·浏览器
huaCodeA7 小时前
Android面试-Flow相关
android·面试·职场和发展