跳到主要内容

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 数据。

详见 分布式会话

相关链接