前端面试网络协议高频考点:从DNS到HTTP/3全梳理
2026/8/29 23:01:11 网站建设 项目流程

每年九十月份,是前端岗位求职最密集的时段。圈里人管这叫"铜九铁十",听名字就知道,这个阶段岗位数量不少,但竞争也最凶。我每年这时候都会帮身边的朋友做模拟面试,发现一个规律:不管是校招还是社招,网络协议这块"八股文"几乎必考,而且很多同学挂就挂在网络题上。

倒不是说网络知识有多难,而是大家平时写业务代码,天天跟fetchaxios打交道,但对底层协议的理解停留在"会用"层面,面试官一追问就露馅。这篇内容我打算把前端面试里网络相关的高频考点系统地捋一遍,从 DNS、TCP 到 HTTP 协议演进、缓存机制、跨域方案、WebSocket,每一块都按"面试官想听到什么答案"的标准来拆解,适合正在准备秋招面试的同学,也适合想系统补一下网络基础的初中级前端。

1. 为什么"网络"是前端面试八股文里的硬骨头

1.1 前端岗位的面试到底在考察什么

很多准备面试的同学有个误区,觉得前端面试考网络就是背几个概念。实际上,面试官考察网络知识,背后有三层意图:第一,看你有没有完整理解一次 HTTP 请求从输入 URL 到页面渲染的完整链路;第二,看你遇到页面加载慢、资源加载失败这类实际问题时,能不能从网络层面定位原因;第三,看你对 HTTP 协议演进、缓存、跨域这些机制的理解深度,来判断你未来能不能解决复杂的前端性能问题。

所以你会发现,网络题很少单独出,通常是和浏览器渲染、性能优化、工程化配置揉在一起问。比如面试官问"页面加载慢怎么排查",你可以从 DNS 解析耗时、TCP 连接耗时、TLS 握手耗时、首字节时间(TTFB)、资源加载瀑布图(Waterfall)这些网络维度一层层拆,这一套答下来,面试官基本就能判断你的水平了。

1.2 网络知识在面试中的出题方式与高频考点

根据我这两年收集的面经数据,前端面试中网络相关的问题主要集中在六个方向:DNS 解析流程、TCP 三次握手与四次挥手、HTTP 版本演进与核心机制、HTTP 缓存、跨域与 CORS、WebSocket 与 CDN。其中 HTTP 缓存和跨域属于最高频考点,几乎每三场面试就有一场会问到;DNS 和 TCP 握手属于基础必答项;HTTP/2 和 HTTP/3 的对比则是近几年面试官非常爱追问的新方向。

这里有个规律值得注意:面试官对网络题的追问深度,往往和你的简历写的技术栈相关。你写了"熟悉 HTTP 协议",他就会追问到 HTTPS 握手细节;你写了"做过前端性能优化",他就一定会问缓存策略和 CDN 加速原理。所以准备的时候要有"一问到底"的意识,每个知识点至少要准备两层追问的回答。

2. 网络基础协议:DNS 与 TCP,前端人必须吃透的两块地基

2.1 DNS 解析全过程拆解:从输入域名到拿到 IP

DNS(Domain Name System)的作用简单说就是把域名翻译成 IP 地址,但面试考的是你对整个解析链路有没有完整的认知。当你在浏览器地址栏输入www.example.com并回车,DNS 解析大致经历这么几步:

第一步,浏览器先查自己的 DNS 缓存,查不到就去查操作系统层面的缓存(比如 Windows 的 hosts 文件配置就是优先于系统缓存的),系统缓存也没有,就发起真实 DNS 查询请求。第二步,请求会到达配置的本地 DNS 服务器(通常是你网络运营商提供的),本地 DNS 服务器先查自己的缓存,没有缓存就向根域名服务器发起查询。第三步,根域名服务器不会直接告诉你 IP,它会返回顶级域名服务器的地址,比如.com对应的顶级域名服务器地址;本地 DNS 再去问顶级域名服务器,顶级域名服务器返回的是权威域名服务器的地址(也就是你注册域名时服务商提供的 NS 记录);最后本地 DNS 向权威域名服务器发起查询,拿到最终的 IP 地址,并把结果逐级缓存下来。

整个链路里有一个细节面试官特别喜欢考:DNS 使用的是 UDP 协议,端口是 53,因为查询请求很轻量,用 UDP 更快。但区域传输(域名服务器之间同步数据)会用到 TCP,这是为了保证数据完整性。另外,DNS 解析结果在浏览器层面有缓存时间,由响应头里的 TTL 字段控制,这就是为什么你修改了 DNS 解析配置后,可能要等几分钟甚至更久才能生效,因为中间各级缓存还没过期。

我在实际开发中踩过这样的坑:本地联调时改了 hosts 文件把域名指向本地 IP,但浏览器仍然走了真实线上 IP,排查了半天发现是浏览器 DNS 缓存没刷新。后来养成了习惯,改完 hosts 先打开chrome://net-internals/#dns清一下缓存,或者直接用无痕模式调试。这种实战经验面试时顺嘴提一句,面试官会觉得你是真有过线上问题处理经验的。

2.2 TCP 三次握手与四次挥手:连接建立的完整对话

TCP 是 HTTP 底层依赖的传输层协议,面试必考三次握手和四次挥手。握手本质上是双方确认彼此的收发能力,三次挥手建立连接的过程可以这样理解:客户端先发一个SYN报文(同步序列编号),表示"我要建立连接",这是第一次握手;服务端收到后回复SYN + ACK,表示"收到你的请求,我也准备好建立了",这是第二次握手;客户端再回一个ACK,表示"收到你的确认,我们开始传数据吧",这是第三次握手。

为什么不是两次握手?这是面试官必追问的问题。原因在于:如果只有两次握手,服务端无法确认客户端是否收到了自己的同步请求。假设客户端第一次SYN因为网络延迟重传了,服务端收到了两个SYN但只回复一个ACK,客户端可能根本没收到这个确认,导致服务端白白为一条无效连接分配资源。三次握手的作用就是让双方都能确认"对方的接收能力正常",避免这种半开连接的资源浪费。

四次挥手则是断开连接的过程:主动关闭方发送FIN,表示"我数据发完了";被动关闭方回复ACK,表示"知道了,但我可能还有数据要发";等被动关闭方数据发完,再发FIN,表示"我也发完了";主动关闭方回复最后一个ACK,连接才真正关闭。这里有个特殊状态叫TIME_WAIT,主动关闭方在发送最后一个ACK后要等待 2MSL(报文最大生存时间的两倍)才真正关闭,目的是确保对方能收到最后的确认,否则对方会一直重发FIN

我面试过的一些候选人,能把三次握手的报文名字背出来,但问他"为什么 TCP 连接是可靠传输"就答不上来。其实可靠传输的核心在于:确认应答机制(ACK)、超时重传机制、流量控制(滑动窗口)、拥塞控制(慢启动和拥塞避免)。这四个机制才是 TCP 面试题的根本,握手挥手只是表象。准备的时候,建议你把每个机制的触发场景想明白,比如"什么情况下会触发快速重传",答出来就是加分项。

2.3 面试官为什么爱在握手细节上连环追问

面试官追问握手细节,通常是为了测试你对计算机网络的理解是不是停留在背诵层面。比如他会问:第三次握手失败了怎么办?此时客户端已经进入ESTABLISHED状态,但服务端迟迟没收到最后一个ACK,服务端会超时重传SYN + ACK,如果多次重传仍未收到确认,服务端就会释放连接资源。这种问题考的是你对协议状态机的理解,而不是单纯记结论。

再比如他会问:为什么挥手要四次,握手只要三次?因为 TCP 是全双工的,断开时两端的数据发送是独立的。握手时双方还没开始传数据,SYNACK可以合并成一次发送;但挥手时被动关闭方可能还有数据没发完,不能把FINACK合在一起,所以必须拆成四次。我建议你把 TCP 的状态迁移图自己画一遍,尤其是TIME_WAITCLOSE_WAIT这两个状态的区别,这是线上问题排查时经常遇到的状态。

实际排查中,CLOSE_WAIT堆积往往意味着服务端代码里有连接没正常关闭,是资源泄漏的信号;TIME_WAIT过多则可能影响新连接的建立速度。这些虽然更多是后端同学关注的问题,但前端如果做 Node.js 中间层,一样会遇到。面试时能主动讲出这些实际排查经验,比单纯背概念加分太多了。

3. HTTP 协议演进:从 1.0 到 3.0,版本对比才是考点核心

3.1 HTTP/1.0 与 HTTP/1.1 的关键差异:连接复用与缓存头

HTTP 协议是前端最应该吃透的一块。目前生产环境大量使用的还是 HTTP/1.1,但 HTTP/2.0 的普及率已经很高,HTTP/3.0 也在快速落地。面试官最爱的考法是横向对比:问 HTTP/1.0 和 HTTP/1.1 有什么区别,HTTP/1.1 和 HTTP/2.0 有什么区别,为什么要搞 HTTP/3.0。

HTTP/1.0 时代的核心问题是:每个请求都要新建一次 TCP 连接,请求完就断开,非常浪费。HTTP/1.1 引入了持久连接(Keep-Alive),默认支持在一个 TCP 连接上串行传输多个请求,这就大大减少了握手开销。同时 HTTP/1.1 还引入了Host头,让一台服务器可以挂多个域名(虚拟主机),这是当年解决 IP 资源紧张的重要举措。

但 HTTP/1.1 有个致命伤:队头阻塞(Head-of-Line Blocking)。因为在一个 TCP 连接上,请求是串行的,前一个请求响应没返回,后面的请求就得排队等着。虽然浏览器会为同一个域名开多个 TCP 连接(通常是 6 个)来缓解这个问题,但本质上没解决。这个瓶颈就是 HTTP/2.0 要解决的核心问题。

3.2 HTTP/2.0 的多路复用与二进制分帧

HTTP/2.0 最大的革命是引入了二进制分帧层,把请求和响应拆分成一个个小的帧(Frame),然后通过流(Stream)传输。多个请求的帧可以在同一个 TCP 连接上交错传输,接收方再根据帧头信息重新组装,这就是多路复用(Multiplexing)。它彻底解决了 HTTP/1.1 的队头阻塞问题——注意,这里的队头阻塞指的是应用层的请求阻塞,不是 TCP 层的。

HTTP/2.0 还有几个重要特性:头部压缩(HPACK),因为请求头里很多字段是重复的(Cookie、User-Agent 等),通过静态表和动态表压缩可以大幅减少传输体积;服务端推送(Server Push),服务端可以主动把客户端可能需要的资源推过去,比如页面 HTML 里引用的 CSS 和 JS;以及请求优先级,让关键资源优先传输。

但 HTTP/2.0 有一个遗留问题:它底层的 TCP 连接如果发生丢包,TCP 的重传机制会导致所有流都阻塞等待,这就是TCP 层队头阻塞。网络质量越差,这个问题越明显。这也是 HTTP/3.0 出现的原因——干脆把传输层协议换掉。

3.3 HTTP/3.0 的 QUIC 革命:为什么基于 UDP 反而更快

HTTP/3.0 的核心变化是抛弃 TCP,改用基于 UDP 的QUIC 协议。很多人第一反应是:UDP 不是不可靠传输吗?怎么反而更可靠了?关键在于 QUIC 在用户态实现了可靠性机制,相当于把 TCP 的可靠传输能力搬到了 UDP 之上,同时解决了 TCP 的两个痛点:一是握手延迟,TCP 加 TLS 需要至少 2 个 RTT(往返时间),QUIC 的握手可以把传输和加密握手合并,做到 0-RTT 或 1-RTT 建立连接;二是队头阻塞,QUIC 支持多路复用,每个流独立交付,一个流的丢包不会阻塞其他流。

QUIC 还有一个实用特性叫连接迁移(Connection Migration),因为 TCP 连接是用四元组(源 IP、源端口、目标 IP、目标端口)标识的,你从 WiFi 切到 4G,IP 变了,TCP 连接就得断开重连。QUIC 用连接 ID 标识连接,网络切换后连接依然可以保持,这对移动端体验提升非常明显。面试官如果问你"HTTP/3.0 为什么快",你能从握手 RTT、队头阻塞、连接迁移三个维度回答,基本就是满分答案了。

这里我说个准备建议:面试时不要只背差异点,最好能结合你实际项目中的网络环境来讲。比如你做过移动端 H5 优化,可以说"我们当时把站点切到 HTTP/2 后,多资源并行加载性能提升明显,但弱网环境下仍然能感受到丢包重传的影响",这就把书本知识和实战经验结合起来了。

4. 缓存机制与 HTTPS:面试必问的两个高频专题

4.1 强缓存与协商缓存:浏览器缓存的完整工作流程

HTTP 缓存是前端面试网络题里的"顶流",几乎逢面必考。缓存机制分两大类:强缓存(也叫本地缓存)协商缓存(也叫对比缓存)。强缓存的意思是:浏览器判断本地缓存没过期,直接使用缓存资源,连请求都不发。协商缓存的意思是:缓存可能过期了,浏览器带着资源标识发一个请求去问服务器"这个资源还能用吗?",服务器说"可以用",就返回304 Not Modified,浏览器继续用缓存。

强缓存靠两个响应头控制:ExpiresCache-ControlExpires是 HTTP/1.0 时代的写法,指定一个绝对过期时间,但它有个问题——服务器时间和客户端时间可能不一致,导致缓存判断不准。Cache-Control是 HTTP/1.1 的替代方案,最常用的值是max-age=3600,表示资源在 3600 秒内有效,这是相对时间,不受时钟偏移影响。两者同时存在时,Cache-Control优先级更高,这也是面试官爱考的知识点。

协商缓存则通过两对请求/响应头实现:Last-ModifiedIf-Modified-Since是一对,ETagIf-None-Match是另一对。前者用文件的最后修改时间判断,精确到秒,如果文件在 1 秒内被修改多次就判断不出来;后者用文件内容的哈希标记判断,精准度更高。两者同时存在时,ETag优先级更高

4.2 缓存判断流程图:面试时怎么讲才能拿高分

面试官让讲缓存流程时,很多同学会背得颠三倒四。我建议你按这个顺序组织答案:浏览器发起请求前,先检查强缓存是否命中,命中就直接用,不发请求,状态码显示200 (from disk cache)200 (from memory cache);强缓存没命中,就带上协商缓存的标识(If-Modified-SinceIf-None-Match)发请求给服务器;服务器根据这些标识判断资源是否变化,没变化返回304,浏览器继续用缓存,变化了返回200和新资源,浏览器更新缓存。整个流程一句话总结:先强后弱,强缓存不发请求,协商缓存发请求但可能不传资源

这里有两个容易被忽略的细节。第一,Cache-Control的优先级高于Expires,同时设置时以Cache-Control为准。第二,no-cacheno-store是两个容易混淆的指令:no-cache的意思是"不要直接用强缓存,每次先去服务器协商验证一下",它并不禁止缓存;no-store才是真正禁止任何形式的缓存。很多同学把no-cache理解成"不缓存",这在面试里是个明显的扣分点。

实际项目里,静态资源的缓存策略通常是:给文件名加指纹(比如app.a1b2c3.js),并设置Cache-Control: max-age=31536000, immutable,因为文件名一变就相当于新资源,可以放心缓存一年;而index.html这类入口文件设置no-cache,保证每次能拿到最新的资源引用列表。这个策略我在项目里反复用过,面试时能讲清楚原理和取舍,就是很扎实的加分项。

4.3 HTTPS 握手过程与中间人攻击:从对称加密到非对称加密

HTTPS 面试题的套路很固定:先问 HTTPS 和 HTTP 的区别,再问握手过程,再追问为什么用混合加密。HTTPS 的核心就是在 HTTP 和 TCP 之间加了一层 TLS/SSL 协议,解决三个问题:加密传输防止窃听、身份验证防止冒充、完整性校验防止篡改。

TLS 握手大致流程如下:客户端发ClientHello,携带支持的 TLS 版本、加密套件列表和一个随机数;服务器回ServerHello,选定加密套件并返回自己的证书和另一个随机数;客户端验证证书的合法性(是否由可信 CA 签发、域名是否匹配、是否过期),验证通过后生成第三个随机数(预主密钥),用服务器证书里的公钥加密并发送给服务器;服务器用私钥解密得到预主密钥,双方根据三个随机数各自生成相同的会话密钥;之后双方用对称加密的会话密钥通信。

为什么不用纯非对称加密?因为非对称加密计算开销大,不适合传输大量数据,所以只用来安全地交换会话密钥,后续数据用对称加密(如 AES)传输,这就是"混合加密"方案。为什么不用纯对称加密?因为密钥怎么安全地传给对方是个死结,需要非对称加密来解决密钥分发问题。

中间人攻击则是面试官最爱的追问:如果你的电脑里被安装了恶意根证书,或者用户忽略了证书验证警告,中间人就可以用自己伪造的证书与客户端建立加密通道,客户端浑然不知。这就是为什么浏览器对证书错误提示非常严格——本质上是在防中间人攻击。前端开发中常见的nginx配置证书、HTTPS混合内容警告(页面是 HTTPS 但加载了 HTTP 资源),都是这个知识点的实战延伸。

5. 跨域与 CORS:前端网络面试的"送命题"

5.1 同源策略与 CORS 原理:为什么会有跨域问题

同源策略是浏览器最重要的安全机制之一,它规定:只有协议、域名、端口三者都相同,两个页面才属于同源,可以互相访问资源和修改 DOM。不同源的页面之间,浏览器会阻止一些请求,因为这是防止恶意网站盗取你数据的核心防线。记住核心判断标准:协议、域名、端口,三者缺一不可,http://example.comhttps://example.com都算跨域,哪怕域名完全一样。

前端最常见的跨域场景是:页面部署在http://localhost:8080,接口在http://api.example.com,此时请求就是跨域的。浏览器不会阻止请求发出,但会拦截响应——这是理解 CORS 的关键。实际流程是:浏览器发出跨域请求,服务器正常处理并返回响应,但浏览器检查响应头里没有正确的Access-Control-Allow-Origin,就把响应拦截了,前端收到的就是 CORS 错误。

5.2 预检请求与会话场景:简单请求和复杂请求的区别

跨域请求分两类:简单请求和复杂请求,分类标准需要记清楚。简单请求要同时满足三个条件:请求方法是GETHEADPOST之一;请求头只能是AcceptAccept-LanguageContent-LanguageContent-Type等几个安全字段;Content-Type只能是application/x-www-form-urlencodedmultipart/form-datatext/plain之一。不满足这些条件的就是复杂请求。

复杂请求会触发预检请求(Preflight):浏览器先发一个OPTIONS请求,问服务器"我准备发一个带Authorization头的 PUT 请求,你允许吗",服务器通过Access-Control-Allow-HeadersAccess-Control-Allow-Methods来声明允许的请求头和请求方法,只有预检通过,浏览器才会发真正的请求。这里有个实际开发中常踩的坑:很多后端同学只配了Access-Control-Allow-Origin,没配Access-Control-Allow-Headers,导致前端带了自定义请求头就报跨域错误。排查这类问题时,打开 DevTools 的 Network 面板看有没有OPTIONS请求、响应头里有没有对应的Access-Control-*字段,定位非常快。

跨域解决方案这块,面试官通常期待你答出 CORS、JSONP、反向代理、postMessage 四种方案。JSONP 的原理是利用<script>标签不受同源策略限制的特性,通过动态插入 script 标签加载接口返回的 JS 代码,但只能支持 GET 请求,现在已经被 CORS 逐渐替代。反向代理是开发环境最常用的方案,原理就是通过同源的服务器中转请求,webpack-dev-serverproxy配置和nginx的反向代理都是这个思路,绕开了浏览器的同源限制。postMessage则主要用于iframe场景下的跨窗口通信。每种方案的优缺点、适用场景要能讲清楚,这是面试官判断你工程经验的重要依据。

6. WebSocket、CDN 与其他高频网络考点

6.1 WebSocket 连接机制与心跳保活

WebSocket 是前端实现实时通信的首选方案,面试考察点集中在三个方面:连接原理、与 HTTP 的关系、以及心跳机制。WebSocket 的连接建立流程是:先通过 HTTP 发起升级请求,请求头里带Connection: UpgradeUpgrade: websocket,服务器返回101 Switching Protocols状态码,协议就从 HTTP 切换成了 WebSocket,之后双方就可以在一个全双工通道上进行低延迟的实时通信。

与 HTTP 的区别是重点:HTTP 是半双工、请求-响应模式,只能客户端主动发起;WebSocket 是全双工,服务端可以主动推送消息,而且连接建立后没有 HTTP 请求头那些冗余开销,适合聊天、实时行情、在线协作这类场景。我在做实时数据看板项目时,最初用的是轮询,每 5 秒请求一次接口,能跑但浪费资源;换成 WebSocket 后,服务器一有数据变更就推给前端,用户体验和资源消耗都好了很多。

心跳机制是 WebSocket 面试里爱追问的实战细节。因为 TCP 连接可能因为网络问题处于假死状态,双方都不知道连接已断。解决方案是:客户端定时发送 ping 帧(或自定义心跳消息),服务器收到后回复 pong,如果客户端连续多次没收到 pong,就判定连接断了,主动重连。前端实现时可以写一个简单的定时器逻辑:

function startHeartbeat(ws, interval = 30000) { let heartbeatTimer = null; let lostCount = 0; const MAX_LOST = 3; function sendPing() { if (ws.readyState === WebSocket.OPEN) { ws.send(JSON.stringify({ type: 'ping' })); } } ws.addEventListener('open', () => { heartbeatTimer = setInterval(() => { lostCount += 1; if (lostCount >= MAX_LOST) { console.warn('heartbeat lost, reconnect...'); clearInterval(heartbeatTimer); reconnect(); return; } sendPing(); }, interval); }); ws.addEventListener('message', (event) => { const data = JSON.parse(event.data); if (data.type === 'pong') { lostCount = 0; } }); }

这个代码里的关键是lostCount的累计机制:超时未收到 pong 就累计,连续超过阈值才断开重连,避免网络抖动导致频繁重连。

6.2 CDN 加速原理与前端性能的关联

CDN(内容分发网络)面试题通常不会单独考,而是糅合在"如何做前端性能优化"里。CDN 的原理简单说就是:在全球各地部署边缘节点,把静态资源缓存到离用户最近的节点上,用户请求资源时,DNS 解析会把域名解析到最近的节点 IP,避免所有用户都回源站请求,从而大幅降低网络延迟。

整个流程是:用户访问cdn.example.com/static/app.js,DNS 解析时 CDN 服务商会根据用户的 IP 地理位置返回最近的边缘节点 IP,边缘节点收到请求后,如果本地有缓存就直接返回;没有缓存,就回源站拉取资源并缓存到本地,供后续请求使用。这里有个概念叫回源,回源的频率直接影响源站压力和用户体验。

前端面试中,CDN 相关的追问方向通常是:为什么静态资源要放 CDN 而不是放业务服务器?答案从成本和性能两个维度说:静态资源访问量大,如果都从业务服务器出,既占带宽又拖慢动态接口的响应速度;放到 CDN 后,边缘节点分流了绝大多数静态请求,源站专注处理动态逻辑。另外 CDN 资源一定要配合指纹命名,因为 CDN 节点缓存更新有延迟,如果你覆盖同名文件,用户拿到的可能是旧缓存,指纹命名能保证新资源被正确拉取。

6.3 弱网环境与前端网络状态监测

随着移动端 H5 场景增多,面试官开始关注弱网适配问题。前端可以通过navigator.connectionAPI 获取网络信息,比如effectiveType(网络类型:slow-2g2g3g4g)、downlink(估算下行带宽)、rtt(估算往返时间)。利用这些信息,可以动态调整页面加载策略,比如弱网下先加载核心文本内容、降低图片质量、推迟非关键资源的加载。

还有一个实用的 API 是navigator.onLineonline/offline事件,用来监听网络断网与恢复。我在做离线优先的 H5 应用时,就用这个事件来提示用户"当前网络不可用",并在网络恢复后自动同步本地缓存的表单数据。实现思路是:监听offline事件时,把用户提交的数据存入 localStorage;监听online事件时,把积压的数据批量发到服务器。这个方案虽然简单,但在网络不稳定的业务场景里非常实用,面试里讲出来也很加分。

开发者工具里的 Network 面板提供了非常完整的网络性能分析能力,包括每个请求的 DNS 解析耗时、连接耗时、TLS 握手耗时、TTFB、内容下载耗时。你可以在 DevTools 里调低网络速度到Slow 3G,观察页面加载的水瀑布图(Waterfall),找出瓶颈请求,然后针对性地优化。面试官问"页面加载慢怎么排查",你如果能说出这套工具链和排查思路,比单纯背概念强太多了。

7. 常见问题与面试追问实录:专门整理的避坑清单

7.1 高频追问 Top 5:从背结论到讲原理

我把这两年高频出现的网络面试追问整理成一张速查表,你可以对着自测:

追问问题期望答案常见翻车点
为什么 HTTP/1.1 还会有队头阻塞一个 TCP 连接上请求只能串行,前一个响应没返回,后续就得等说成 TCP 层丢包重传导致的队头阻塞,混淆了层次
Cache-Control: no-cache是不缓存吗不是,是每次都要到服务器校验,no-store才是禁止缓存分不清 no-cache 与 no-store
ETag 和 Last-Modified 谁优先ETag 优先,因为 ETag 能精确判断内容变化说 Last-Modified 更准确,正好反了
预检请求会带 Cookie 吗预检 OPTIONS 请求一般不带业务数据,Cookie 在正式请求里带以为预检请求也带完整的业务 Cookie
四次挥手为什么不能合并成三次被动关闭方可能还有数据要发,无法把 FIN 和 ACK 同时发出说不出全双工的本质原因

这里我特别说一下no-cache这个问题,我面试过不下十个人,至少一半会答错。大家更容易理解"缓存"的字面意思,但no-cache的真实含义是"使用缓存前必须验证",它允许缓存存储,但每次使用前要到服务器确认资源没过期。你把它理解成"强制协商缓存"就对了。

7.2 面试中容易翻车的细节坑:真实案例复盘

有个真实案例让我印象很深:一个候选人基本功很扎实,但讲到 HTTPS 时说了句"证书的作用是给数据加密",这句话一出口,面试官立刻追问"那公钥加密和私钥加密分别做什么用",候选人支支吾吾答不上来。证书的本质是身份凭证,它绑定了域名和公钥,由 CA 签名保证公钥确实属于这个域名;而数据加密是握手后通过会话密钥完成的。这两个概念不能混。

另一个常见翻车细节是状态码。面试官问"204 和 304 有什么区别",很多同学直接懵了。204 No Content 表示请求成功但响应体为空,常用于删除操作后返回;304 Not Modified 表示资源未修改,是协商缓存命中的响应,响应体同样为空。两者都不返回内容,但含义完全不同。404 和 410 也容易混:404 是资源不存在,410 是资源曾经存在但被永久删除,现在已经不再提供。

最后再提醒一个容易被忽略的点:HTTP状态码的分类要记牢,1xx是信息性响应(101 切换协议最常考)、2xx是成功(200、201、204)、3xx是重定向(301 永久、302 临时、304 未修改)、4xx是客户端错误(400、401、403、404)、5xx是服务端错误(500、502、503、504)。每次答状态码的时候,顺便补充一下这个状态码在什么业务场景下会出现,面试官会觉得你有真实项目经验。

7.3 准备网络八股文的最后建议

我个人带人准备面试的习惯是三步走:第一步是构建完整链路,把"输入 URL 到页面展示"整条链路上涉及的网络知识点串成一条线——DNS、TCP、TLS、HTTP 请求、缓存、渲染,每一个环节都要能讲五分钟以上;第二步是横向对比,把 HTTP/1.1、HTTP/2.0、HTTP/3.0 的差异做成表格,把强缓存和协商缓存的判别条件刻在脑子里;第三步是实战复盘,把你平时开发中遇到的实际网络问题整理成案例,比如跨域报错怎么排查、静态资源缓存失效怎么处理、页面加载慢从哪个 Waterfall 指标开始看。

网络这块八股文和其他前端知识不太一样,它抽象但逻辑性极强,一旦把原理想通了就不容易忘。你花了三个晚上把这些协议细节吃透,换来的不仅是面试时的顺畅回答,更是将来线上问题排查时能快速定位问题源头的底气。说白了,面试不只是为了拿 offer,这些基础早晚会在你做性能优化、排查线上问题、设计前端架构时派上用场。希望这份梳理能帮你在铜九铁十里少踩几个坑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询