【Java面试】Https和Http的区别?以及分别的原理是什么?
HTTP与HTTPS是互联网数据传输的两种核心协议,它们在安全性、工作原理和应用场景上存在显著差异。以下从核心区别和工作原理两方面深入解析:
🔒 一、核心区别总结
特性 | HTTP | HTTPS |
---|---|---|
安全性 | 明文传输,数据易被窃听或篡改 | 通过SSL/TLS加密传输,防止数据泄露和中间人攻击 |
端口号 | 默认80端口 | 默认443端口 |
证书要求 | 无需证书 | 需CA机构颁发的数字证书验证服务器身份 |
性能 | 响应更快(无加密开销) | 因加密计算略慢,但现代硬件差距可忽略 |
协议层 | 应用层协议,直接基于TCP | HTTP + SSL/TLS安全层,再基于TCP |
地址栏标识 | 显示http:// ,浏览器提示"不安全" | 显示https:// ,带绿色锁图标 |
⚙️ 二、HTTP工作原理
HTTP(超文本传输协议)是无状态、无连接的请求-响应协议:
- 请求阶段:
- 客户端(如浏览器)发送HTTP请求,包含方法(GET/POST)、URL、头部信息(如
User-Agent
)。 - 示例:
GET /index.html HTTP/1.1
。
- 客户端(如浏览器)发送HTTP请求,包含方法(GET/POST)、URL、头部信息(如
- 响应阶段:
- 服务器解析请求,返回状态码(如
200 OK
)和响应体(如HTML内容)。
- 服务器解析请求,返回状态码(如
- 连接关闭:
- 每次请求后TCP连接关闭(早期HTTP/1.0),HTTP/1.1后支持短时连接复用。
核心缺陷:
- 数据明文传输,易被中间人窃取或篡改(如密码、银行卡号)。
- 无法验证服务器身份,可能访问钓鱼网站。
🔐 三、HTTPS工作原理
HTTPS = HTTP + SSL/TLS加密层,通过证书验证、密钥交换、对称加密三重机制保障安全:
-
SSL/TLS握手阶段(关键):
- 证书验证:服务器返回数字证书(含公钥、域名、CA签名)。浏览器验证证书有效性(是否过期、CA是否可信、域名匹配)
- 密钥交换:客户端生成随机数(Pre-Master Secret),用服务器公钥加密后发送。服务器用私钥解密获取该随机数
- 生成会话密钥:双方基于随机数生成对称会话密钥(如AES密钥),用于后续数据传输。
-
加密通信阶段:
- 使用会话密钥对HTTP数据进行对称加密传输,保证效率。
- 通过MAC(消息认证码) 验证数据完整性,防止篡改
✅ 为何结合对称与非对称加密?
- 非对称加密(如RSA)用于安全交换密钥(防窃听)。
- 对称加密(如AES)用于高效加密大量数据。
🛡️ 四、HTTPS如何防止中间人攻击?
- 证书权威性:
- 中间人无法伪造CA签名的证书(私钥由CA保密),浏览器会警告非法证书
- 密钥保密性:
- 即使截获加密的随机数,中间人无服务器私钥无法解密,无法获取会话密钥
- 数据完整性校验:
- 每个数据包附带MAC值,篡改会导致校验失败。
⚠️ 注意:若用户主动安装抓包工具证书(如Fiddler),HTTPS仍可被解密,此时属于用户授信行为
💎 五、应用场景建议
- HTTP:静态内容(如新闻页)、内网服务、性能敏感且无需加密的场景
- HTTPS:登录/支付页面、API接口、用户隐私数据(如医疗记录)、SEO优化(谷歌优先收录HTTPS站点)
现代网站普遍转向HTTPS,Chrome等浏览器已将HTTP标记为“不安全”。安全性需求提升和免费证书(如Let’s Encrypt)的普及,加速了HTTPS的全面落地