Appearance
HTTP 与 HTTPS
HTTP 是前后端都必考的模块。答题主线:HTTP 各版本的演进解决了什么问题 → HTTPS 怎么解决安全问题。
Q1: HTTP/1.0、1.1、2、3 的主要区别? 「🟡 中级」
考察点:协议演进的脉络,能否说清每代解决的问题。
参考答案:
- 1.0:每次请求都要新建连接。
- 1.1:默认长连接(keep-alive)、管道化(有队头阻塞,实际很少用)、新增 Host 头支持虚拟主机、缓存机制增强。
- 2:二进制分帧、多路复用(一个连接并行收发多个请求,解决应用层队头阻塞)、头部压缩(HPACK)、服务器推送。
- 3:基于 QUIC(UDP),解决 TCP 层的队头阻塞;连接迁移(切网不断连);0-RTT 建连。
追问延伸:
- HTTP/2 为什么还会有队头阻塞?(TCP 层丢包会阻塞整个连接)
- HPACK 是怎么做头部压缩的?
Q2: GET 和 POST 的区别? 「🟢 校招/初级」
考察点:基本功,但答得太浅会被追问到语义层面。
参考答案:
- 语义:GET 是获取资源(幂等、安全),POST 是提交资源(非幂等)。
- 参数位置:GET 参数在 URL 查询串,POST 在请求体。
- 缓存:GET 可被缓存和收藏,POST 默认不缓存。
- 长度限制:HTTP 协议本身不限制,是浏览器/服务器实现的差异;幂等性导致 GET 失败可安全重试。
- 进阶:RFC 层面二者都能带 body,区别主要是语义约定而非硬性限制。
追问延伸:
- PUT 和 PATCH 的区别?
- 为什么浏览器刷新会重复提交 POST?怎么防?(PRG 模式)
Q3: 常见状态码及其含义? 「🟢 校招/初级」
考察点:分类记忆能力。
参考答案:
- 2xx:200 成功;201 已创建;204 无内容。
- 3xx:301 永久重定向;302 临时重定向;304 协商缓存命中。
- 4xx:400 参数错误;401 未认证;403 无权限;404 不存在;429 限流。
- 5xx:500 服务器内部错误;502 网关收到上游无效响应;503 服务不可用;504 网关等上游超时。
追问延伸:
- 401 和 403 的区别?(没登录 vs 登录了但没权限)
- 502 和 504 在排查时方向有什么不同?
Q4: 浏览器缓存:强缓存和协商缓存? 「🟡 中级」
考察点:性能优化基础,必考。
参考答案:
- 强缓存:不发请求。
Cache-Control: max-age=N(优先级高)或Expires(绝对时间,易受时钟影响)。 - 协商缓存:发请求验证。
ETag(内容指纹,优先级高)配If-None-Match;Last-Modified配If-Modified-Since;未变化返回 304。 - 典型策略:HTML 用协商缓存,静态资源用强缓存 + 文件名哈希。
追问延伸:
- ETag 在集群部署下要注意什么?(不同节点生成值不一致)
- CDN 上的缓存策略怎么设计?
Q5: HTTPS 的加密过程? 「🟡 中级」
考察点:非对称加密、证书、会话密钥的完整链路。
参考答案:
- HTTPS = HTTP + TLS。TLS 握手(以 1.2 为例):
- Client Hello:发送支持的版本、加密套件、客户端随机数。
- Server Hello:选定套件、服务端随机数 + 数字证书(含公钥,由 CA 签发)。
- 客户端验证证书链(根证书内置在操作系统/浏览器),生成预主密钥并用服务端公钥加密发送(ECDHE 场景改为交换密钥参数)。
- 双方用三个随机数推导出会话密钥,后续通信用对称加密。
- 核心思想:非对称加密交换密钥,对称加密传输数据(对称加密快,非对称加密解决密钥分发)。
追问延伸:
- 证书链是怎么验证的?中间人拿到证书能伪造吗?
- 为什么 TLS 1.3 去掉了 RSA 密钥交换?(前向安全性)
Q6: Cookie、Session、Token(JWT)的区别? 「🟡 中级」
考察点:认证会话方案的选型。
参考答案:
- Cookie:浏览器端存储,随请求自动携带;可设 HttpOnly、Secure、SameSite。
- Session:服务端存会话状态,客户端只存 sessionId(通常放 Cookie);分布式下需要会话共享(Redis)。
- JWT:无状态令牌,包含 header.payload.signature,服务端验签即可,不依赖存储;缺点是无法主动失效(除非引入黑名单)。
- 微服务/多端场景倾向 JWT + 短有效期 + refresh token;传统单体应用 Session 更简单。
追问延伸:
- JWT 被盗了怎么办?(短有效期、刷新机制、黑名单)
- SameSite 属性防的是什么攻击?(CSRF)