跳到主要内容

HTTP 与 HTTPS

问题​

HTTP 和 HTTPS 有什么区别?HTTPS 是如何保证安全的?

答案​

HTTP vs HTTPS​

维度HTTPHTTPS
端口80443
安全性明文传输TLS/SSL 加密
证书不需要需要 CA 证书
性能快多一次 TLS 握手

HTTP 请求方法​

方法语义幂等安全
GET获取资源✅✅
POST创建资源❌❌
PUT全量更新✅❌
PATCH部分更新❌❌
DELETE删除资源✅❌
HEAD获取响应头✅✅
OPTIONS查询支持的方法(CORS 预检)✅✅

常见状态码​

状态码含义常见场景
200OK请求成功
201Created资源创建成功
301Moved Permanently永久重定向
302Found临时重定向
304Not Modified缓存未过期
400Bad Request请求参数错误
401Unauthorized未认证
403Forbidden无权限
404Not Found资源不存在
500Internal Server Error服务端错误
502Bad Gateway网关收到无效响应
503Service Unavailable服务不可用
504Gateway Timeout网关超时

TLS 握手过程​

HTTPS = 非对称加密 + 对称加密
  • 非对称加密(RSA/ECDHE):仅用于 TLS 握手阶段,安全交换密钥
  • 对称加密(AES):用于后续数据传输,性能高

HTTP/1.1 vs HTTP/2 vs HTTP/3​

特性HTTP/1.1HTTP/2HTTP/3
传输层TCPTCPQUIC (UDP)
多路复用❌ 串行✅ 一个连接多个流✅ 无队头阻塞
头部压缩❌✅ HPACK✅ QPACK
服务器推送❌✅✅
队头阻塞HTTP + TCP 层都有TCP 层仍有完全解决
连接建立TCP + TLS (2-3 RTT)TCP + TLS0-1 RTT

常见面试问题​

Q1: GET 和 POST 的区别?​

答案:

维度GETPOST
语义获取资源提交数据
参数位置URL Query String请求体
长度限制浏览器限制 URL 长度(~2KB)无限制
缓存可以缓存默认不缓存
幂等性幂等非幂等
书签/历史可以收藏不能

从 HTTP 协议层面来说,GET 也可以带请求体,POST 也可以用 URL 参数,但不推荐。

Q2: HTTPS 能防止中间人攻击吗?​

答案:

能,前提是证书验证正确。HTTPS 通过 CA 证书链验证服务端身份:

  1. 客户端验证证书是否由受信任的 CA 签发
  2. 验证证书域名与请求域名是否匹配
  3. 验证证书是否过期

如果用户忽略了浏览器的证书警告,或安装了恶意 CA 根证书,中间人攻击仍然可能。

Q3: HTTP Keep-Alive 是什么?​

答案:

HTTP/1.1 默认开启 Keep-Alive(长连接),一个 TCP 连接可以发送多个 HTTP 请求/响应,避免每次请求都重新建立 TCP 连接。

通过 Connection: keep-alive 头部控制,Connection: close 关闭。

答案:

维度CookieSession
存储位置客户端服务端
安全性较低(可被截获)较高
大小限制4KB无限制
生命周期由 Expires/Max-Age 控制服务端配置超时时间

通常 Session ID 存在 Cookie 中,服务端通过 Session ID 查找对应的 Session 数据。

详见 分布式会话。

相关链接​