HTTP 和 HTTPS 的区别(面试Markdown)
HTTPS = HTTP + TLS/SSL,在HTTP和TCP中间增加一层TLS加密。
核心区别
- 安全层面(最关键)
- HTTP:明文传输,数据裸奔。抓包可以直接看到请求参数、响应内容,容易被窃听、篡改、中间人攻击。
- HTTPS:TLS加密传输,传输数据是密文。防止窃听、篡改,校验身份,抵御中间人攻击。
- 端口不同
- HTTP:默认80端口
- HTTPS:默认443端口
- 握手流程不同
- HTTP:直接TCP三次握手,之后就传输HTTP报文。
- HTTPS:TCP三次握手完成后,还要进行TLS握手:协商加密套件、交换证书、生成会话密钥,之后才加密传输业务数据。
- 性能开销
- HTTP:握手简单,没有加解密开销。
- HTTPS:TLS握手多一轮RTT;同时客户端、服务端需要做加解密运算,会消耗少量CPU;现在会话复用可以降低握手开销。
- 证书
- HTTP:不需要证书。
- HTTPS:需要CA颁发的数字证书,用来证明服务器身份,防止伪装服务器。
- 浏览器标识
- HTTP:地址栏不安全警告。
- HTTPS:小锁标识。
TLS握手简单流程(面试简要)
- 客户端发送支持的加密套件
- 服务端返回证书、选定加密套件
- 客户端校验证书合法性
- 双方协商生成会话密钥
- 后续所有HTTP报文使用会话密钥对称加密传输
小知识点:非对称加密只用来协商密钥;真正业务数据用对称加密传输,非对称加密运算慢,不会用来加密大报文。
常见面试追问
Q:HTTPS能完全保证安全吗?
不能。
- 如果证书被盗、使用自签名证书、证书被伪造,中间人攻击依然有可能发生。
- HTTPS只保证传输过程加密;业务本身逻辑漏洞(SQL注入、XSS)它管不了。
Q:HTTPS防什么?不防什么?
✅防:传输窃听、报文篡改、中间人伪装服务器
❌不防:业务漏洞、客户端本身泄露数据、钓鱼网站骗取用户主动输入信息。
口述面试版
HTTP是明文协议,端口80,传输的数据可以被抓包窃听篡改;HTTPS就是HTTP加上TLS加密层,端口443。
HTTPS需要数字证书校验服务器身份,通过非对称加密协商密钥,业务数据使用对称加密传输。
代价是多一次TLS握手,有少量CPU加解密开销。
要注意HTTPS解决传输链路安全,但是无法解决业务代码层面的安全漏洞。
补充:HTTP2 基本都运行在HTTPS之上。