HTTP高频易错坑点

高频易错坑点(踩雷避坑)

实践中 HTTP 的坑,十个候选人有八个会踩。不是知识没学到,而是这些细节太容易混淆。下面按”误区 → 正解 → 为什么爱问”的结构,帮你把雷区排一遍。

核心易错表

#误区正解为什么爱问
1❌ POST 比 GET 更安全✅ HTTP 明文下两者全暴露,加密靠 HTTPS。用 Wireshark 抓包,GET 的 URL 参数和 POST 的 Body 都能直接看到考察你是否理解 HTTP 本质是明文传输,“安全”不是 HTTP 层面的事
2❌ POST 一定发两个 TCP 数据包✅ 这是浏览器实现细节(某些浏览器先发 Header 再发 Body),不是 HTTP 协议的硬性规定,不同浏览器行为不同考察你是否分得清”协议规定”和”具体实现”
3❌ 304 是错误状态码✅ 304 Not Modified 是正向优化——协商缓存命中,服务器告诉你”用本地的就行”。它属于 3xx 重定向系列但不算真正的重定向,因为没有跳转到新地址考察你是否懂缓存机制,很多人看到 3xx 就以为出错了
4❌ 非对称加密用来加密大段数据✅ 非对称加密(RSA 等)计算量极大,只用来加密短小的对称密钥。真正的业务数据用对称加密(AES 等),这就是 HTTPS 的”混合加密”设计考察 HTTPS 原理,区分对称/非对称各自的分工
5❌ Session 完全不用 Cookie✅ 绝大多数场景下 sessionId 靠 Cookie 传递。只有禁用 Cookie 时才用 URL 重写兜底(?jsessionid=xxx考察 Cookie 和 Session 的依赖关系,很多人以为是两个独立方案
6❌ HTTP/2 完全解决了队头阻塞✅ HTTP/2 只解决了应用层(HTTP 协议层)的队头阻塞。但所有流共享一个 TCP 连接,TCP 丢包会导致传输层队头阻塞,所有 Stream 都被卡。HTTP/3 换 QUIC 才从根本上解决考察对协议演进的理解深度,尤其要区分”应用层”和”传输层”
7❌ 长连接 = WebSocket✅ HTTP/1.1 长连接仍是”一问一答”的请求-响应模型;WebSocket 是全双工通信,握手后服务器能主动推送,协议也完全不同(ws:// / wss://)考察对”长连接”概念的多维度理解——TCP 长连接、HTTP 长连接、WebSocket 长连接都不完全等同
8❌ Cookie 存数据很安全✅ Cookie 在客户端明文存储,用户可以直接修改。HttpOnly 只防 JS 读取不防篡改;Secure 只确保传输加密不确保存储安全。敏感数据必须加密后存或放服务端考察 Cookie 安全属性的边界——每个属性各管一摊,不是万能药
9❌ HTTPS 很慢,影响性能✅ 现代硬件(CPU 有 AES-NI 指令集)下 TLS 加解密损耗极小。TLS 1.3 握手只需 1-RTT,还有 Session 复用机制。性能影响基本可以忽略考察对 HTTPS 性能的认知是否还停留在十年前
10❌ GET 请求绝对不能带 Body✅ HTTP 规范(RFC 7231)没有明确禁止 GET 带 Body,但语义上不推荐(GET 是”获取”,Body 暗示”提交”)。更关键的是:很多框架、代理、缓存会忽略或拒绝 GET 的 Body考察对 HTTP 规范 vs 工程实践的区分
11❌ 301 和 302 只是”永久”和”临时”的区别✅ 还有缓存行为SEO 的区别!301 会被浏览器强制缓存(下次直接跳不请求服务器),搜索引擎会转移权重到新地址;302 不会被缓存,每次都会问服务器,搜索引擎保留原地址。域名迁移必须用 301,用 302 会导致 SEO 灾难考察 HTTP 对搜索引擎的影响和浏览器缓存策略,这是区分初级和高级的分水岭
12❌ HTTPS 意味着”这个网站安全”✅ HTTPS 只保证传输过程加密身份认证,不保证网站本身没有恶意代码。钓鱼网站也可以用 HTTPS(现在 90% 以上的钓鱼站都有 HTTPS)。小绿锁不代表网站善良考察安全常识——加密不等于无害
13❌ CORS 是一种安全机制✅ CORS 恰恰相反,它是对同源策略的放松。没有 CORS 的时候,所有跨域都被禁止;CORS 让服务器能说”这个域名我信得过,放开”。跨域请求其实已经发出去了,CORS 只控制浏览器是否把响应交给 JS考察对 CORS 本质的理解——它不是加锁,是开锁
14❌ Cookie 的 HttpOnly 和 Secure 作用一样✅ HttpOnly 防 XSS(禁止 JS 读取 Cookie);Secure 防中间人攻击(只在 HTTPS 下发)。两者管的是不同攻击向量,设置一个不等于设了两个考察 Cookie 各安全属性的独立作用,不能混为一谈
15❌ 协商缓存发了请求,所以没价值✅ 304 返回时没有 Body,省掉了传输资源文件的大头流量(图片/JS/CSS 动辄几百 KB)。虽然发了一次往返,但相比重新下载,带宽和时间都省了考察对缓存性能的量化理解

补充:状态码对比重点

301 vs 302 vs 307

对比项301 Moved Permanently302 Found307 Temporary Redirect
语义永久迁移临时跳转临时重定向(严格)
浏览器缓存✅ 强制缓存,下次不请求❌ 不缓存,每次都问❌ 不缓存
SEO权重转移到新地址保留原地址保留原地址
POST 变 GET✅ 会✅ 会(历史遗留问题)❌ 保持原方法
典型场景域名迁移、HTTP→HTTPS未登录跳转、临时活动页需要保持 POST 的重定向

401 vs 403

对比项401 Unauthorized403 Forbidden
核心问题你是谁?(身份认证失败)你配吗?(权限认证失败)
常见原因未登录、Token 过期、密码错误已登录但角色权限不够、IP 被封
解决方式重新登录获取 Token联系管理员开通权限
关联响应头WWW-Authenticate无特定头

复习建议: 先把上面的表格过一遍,每一个误区都用自己话讲一遍”为什么会这么问”。实践中被问到这些坑,如果你能主动说”这里有一个常见的误区是……”,会直接在心里给你加分。


一图流(Mermaid)


flowchart TD

    A[HTTP/1.1] --> B[一个请求卡住 后续全等 应用层HOLB]

    C[HTTP/2 多路复用] --> D[应用层 HOLB 解决]

    D --> E[但共享一个 TCP → 丢包 传输层 HOLB 仍在]

    F[HTTP/3 QUIC/UDP] --> G[每条流独立 传输层 HOLB 解决]

速记卡(面试闪卡)

Q1:一句话讲清「HTTP高频易错坑点」到底是什么?

A:HTTP 面试十五个易错误区,专治把实现当协议、把开锁当加锁。

Q2:1. 前五个高频误区 —— 怎么理解?

A:POST 不比 GET 安全(明文都露,加密靠 HTTPS);304 不是错误是缓存命中;非对称加密只加密短密钥(混合加密);sessionId 多靠 Cookie 传;HTTP/2 只解应用层队头阻塞,传输层仍在。英文 HTTPS / HOLB。

Q3:2. 中间五个易错点 —— 怎么理解?

A:长连接≠WebSocket(前者一问一答,后者全双工);Cookie 明文可改,HttpOnly 防 XSS、Secure 防中间人;HTTPS 不慢(AES-NI+1-RTT);GET 规范不禁止带 Body;301 永久缓存转移 SEO、302 临时不缓存。英文 WebSocket / XSS。

Q4:3. 后五个与状态码坑 —— 怎么理解?

A:301/302 还有缓存与 SEO 区别;HTTPS 只保传输不保网站无害(钓鱼也用);CORS 是对同源策略的放松(开锁不是加锁);HttpOnly 与 Secure 管不同攻击;协商缓存虽发请求但省了大文件流量。英文 CORS / SEO。

Q5:4. 状态码对比重点 —— 怎么理解?

A:301 vs 302 vs 307:永久/临时/严格临时,301 强制缓存、302 不缓存、307 保持原方法;401 是“你是谁”(认证失败),403 是“你配吗”(权限不足)。英文 401 Unauthorized / 403 Forbidden。

Q6:核心速记主线有哪些?

  • POST 不比 GET 安全:明文都暴露,加密靠 HTTPS

  • 304 是协商缓存命中,非错误状态码

  • HTTP/2 只解应用层 HOLB,H3 换 QUIC 才解传输层

  • CORS 是放松同源策略(开锁),非安全机制

  • 301 永久+缓存+转移 SEO;302 临时+不缓存

口诀

A:POST 不比 GET 安全,

304 缓存非错端;

H2 解应用层断,

CORS 开锁非加栏。

相关链接