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。

相关推荐
秋风不问归客10 小时前
Springboot面试全面整理
spring boot·后端·面试
小冷coding10 小时前
【面试】结合项目整理的场景面试题,覆盖 Java 基础、锁、多线程、数据库、分布式锁 / 事务、消息中间件等核心维度
java·数据库·面试
我叫黑大帅10 小时前
PHP中的官方操作数据库PDO
后端·面试·php
张元清11 小时前
React 鼠标追踪与交互效果实战
前端·javascript·面试
橘子编程11 小时前
操作系统原理:从入门到精通全解析
java·linux·开发语言·windows·计算机网络·面试
yuki_uix12 小时前
面试题里的 Custom Hook 思维:从三道题总结「异步状态管理」通用模式
前端·react.js·面试
@atweiwei12 小时前
Go语言面试篇数据结构底层原理精讲(下)
数据结构·面试·golang
咚为12 小时前
Rust 经典面试题255道
开发语言·面试·rust
sibylyue14 小时前
Nginx\Tomcat\Jetty\Netty
java·nginx·http
hzxpaipai15 小时前
英语+越南语网站架构设计:派迪科技多语言建站实践解析
网络·科技·物联网·网络安全·https