计算机网络面试八股文——30+题深度解析(TCP/IP/HTTP/HTTPS全覆盖)
写在前面:计算机网络是面试必问的基础知识点,本文覆盖 TCP/IP、HTTP/HTTPS、三次握手四次挥手、DNS、ARP、子网掩码、UDP vs TCP 等核心知识点,每题都有「一句话总结 + 深度解析 + 面试加分回答」,帮你彻底搞懂计网面试。
目录
1. 网络模型
Q1:OSI 七层模型和 TCP/IP 四层模型的区别?
一句话总结:OSI 是理论模型(七层),TCP/IP 是实际使用的模型(四层),面试时主要考 TCP/IP。
深度解析:
想象你要给朋友寄一封信:
1 | |
OSI 七层模型:
| 层级 | 名称 | 功能 | 协议 |
|---|---|---|---|
| 7 | 应用层 | 为用户提供网络服务 | HTTP、FTP、SMTP、DNS |
| 6 | 表示层 | 数据格式转换、加密解密 | SSL/TLS |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端通信、可靠传输 | TCP、UDP |
| 3 | 网络层 | 路由选择、IP 寻址 | IP、ICMP、ARP |
| 2 | 数据链路层 | 帧传输、MAC 寻址 | Ethernet、Wi-Fi |
| 1 | 物理层 | 比特流传输 | 网线、光纤、无线电 |
TCP/IP 四层模型:
| 层级 | 名称 | 对应 OSI 层级 | 协议 |
|---|---|---|---|
| 4 | 应用层 | 应用层 + 表示层 + 会话层 | HTTP、FTP、DNS |
| 3 | 传输层 | 传输层 | TCP、UDP |
| 2 | 网络层 | 网络层 | IP、ICMP |
| 1 | 网络接口层 | 数据链路层 + 物理层 | Ethernet、Wi-Fi |
面试加分回答:
OSI 七层模型是理论模型,实际互联网使用的是 TCP/IP 四层模型。面试时如果说 OSI,要能说清楚每一层的功能和协议;如果说 TCP/IP,要能说清楚每一层的作用。另外,有些资料会把 TCP/IP 分成五层(把网络接口层拆成数据链路层和物理层),这是等价的。
Q2:各层的数据名称是什么?
一句话总结:不同层对数据有不同的叫法,从应用到物理依次是:报文/消息 → 报文段 → 数据报 → 帧 → 比特流。
深度解析:
1 | |
面试加分回答:
数据名称的区分是面试常考题。TCP 的数据叫”报文段”(Segment),IP 的数据叫”数据报”(Packet),以太网的数据叫”帧”(Frame)。这些名称反映了不同层对数据的处理方式。
2. TCP 协议
Q3:TCP 三次握手的过程?
一句话总结:客户端和服务器之间建立连接需要三个步骤:客户端发 SYN → 服务器回 SYN+ACK → 客户端发 ACK。
深度解析:
想象你要和朋友打电话:
1 | |
为什么要三次握手?两次不行吗?
1 | |
面试加分回答:
三次握手的状态变化是面试高频题:
- 客户端:CLOSED → SYN_SENT → ESTABLISHED
- 服务器:CLOSED → LISTEN → SYN_RCVD → ESTABLISHED
另外,第三次握手可以携带数据(HTTP 请求),这是 TCP 的”快速打开”(TFO)特性的基础。
Q4:TCP 四次挥手的过程?
一句话总结:断开连接需要四个步骤:客户端发 FIN → 服务器回 ACK → 服务器发 FIN → 客户端回 ACK。
深度解析:
想象你和朋友打电话要挂断:
1 | |
为什么要四次挥手?三次不行吗?
1 | |
什么是 2MSL?为什么需要等待 2MSL?
1 | |
面试加分回答:
四次挥手的状态变化是面试高频题:
- 客户端:ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
- 服务器:ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED
TIME_WAIT 状态是面试常考题:如果服务器中有大量 TIME_WAIT 状态的连接,说明服务器主动关闭了大量连接(通常是短连接),可以通过调整内核参数(如
net.ipv4.tcp_tw_reuse)来优化。
Q5:TCP 如何保证可靠传输?
一句话总结:TCP 通过校验和、序列号、确认应答、超时重传、流量控制、拥塞控制六大机制保证可靠传输。
深度解析:
1 | |
滑动窗口机制:
1 | |
拥塞控制四大算法:
1 | |
面试加分回答:
TCP 的可靠传输机制是面试超级高频题。要能说清楚:① 校验和 ② 序列号 ③ 确认应答 ④ 超时重传 ⑤ 流量控制(滑动窗口)⑥ 拥塞控制(四大算法)。其中拥塞控制的四大算法(慢启动、拥塞避免、快重传、快恢复)是重点,要能说清楚每个算法的作用。
Q6:TCP 和 UDP 的区别?
一句话总结:TCP 是可靠、面向连接、有序、慢的传输协议,UDP 是不可靠、无连接、无序、快的传输协议。
深度解析:
| 对比项 | TCP | UDP |
|---|---|---|
| 是否连接 | 面向连接(三次握手) | 无连接 |
| 是否可靠 | 可靠(确认应答、重传) | 不可靠(尽最大努力交付) |
| 是否有序 | 有序(序列号重新排序) | 无序(可能乱序到达) |
| 传输效率 | 慢(建立连接、确认、重传) | 快(无连接、无确认) |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有(四大算法) | 无 |
| 首部开销 | 大(20-60 字节) | 小(8 字节) |
| 适用场景 | 文件传输、邮件、HTTP | 视频通话、直播、DNS、DHCP |
面试加分回答:
TCP 和 UDP 的区别是面试必考题。要能从连接性、可靠性、有序性、效率、首部开销等多个维度对比。另外,有些场景会同时使用 TCP 和 UDP,比如 HTTP/3 基于 QUIC 协议(基于 UDP),既保留了 UDP 的快,又通过 QUIC 实现了可靠传输(类似 TCP 的功能)。
3. UDP 协议
Q7:UDP 的应用场景有哪些?
一句话总结:UDP 适合实时性要求高、能容忍少量丢包的场景,比如视频通话、直播、DNS、DHCP。
深度解析:
1 | |
面试加分回答:
UDP 不是”完全不可靠”,而是”尽最大努力交付”。应用层可以自己在 UDP 基础上实现可靠传输机制(比如 QUIC 协议)。面试时如果能说出”UDP 适用于实时性要求高的场景,应用层可以自己实现可靠传输”,会非常加分。
4. HTTP 协议
Q8:HTTP 的请求方法有哪些?
一句话总结:HTTP/1.1 定义了 8 种请求方法,最常用的是 GET、POST、PUT、DELETE(RESTful 风格)。
深度解析:
| 方法 | 作用 | 幂等性 | 安全性 |
|---|---|---|---|
| GET | 获取资源 | 是 | 是 |
| POST | 创建资源 | 否 | 否 |
| PUT | 更新资源(全量) | 是 | 否 |
| PATCH | 更新资源(部分) | 否 | 否 |
| DELETE | 删除资源 | 是 | 否 |
| HEAD | 获取响应头(不返回 body) | 是 | 是 |
| OPTIONS | 获取服务器支持的方法 | 是 | 是 |
| TRACE | 回显服务器收到的请求(用于调试) | 是 | 否 |
幂等性:多次执行相同的操作,结果相同(比如 GET、PUT、DELETE 是幂等的,POST 不是)。
安全性:不会修改服务器资源(比如 GET、HEAD、OPTIONS 是安全的,POST、PUT、DELETE 不是)。
面试加分回答:
RESTful 风格的核心是”URL 表示资源,HTTP 方法表示操作”。面试时如果能说出 Richardson 成熟度模型(Level 0~3),会非常加分。另外,PUT 和 PATCH 的区别是:PUT 是全量更新(客户端提供完整的资源),PATCH 是部分更新(客户端只提供需要修改的字段)。
Q9:HTTP 的请求结构和响应结构?
一句话总结:HTTP 请求/响应由起始行、请求头/响应头、空行、消息体四部分组成。
深度解析:
HTTP 请求结构:
1 | |
HTTP 响应结构:
1 | |
常见请求头:
| 请求头 | 作用 |
|---|---|
| Host | 指定服务器域名和端口 |
| User-Agent | 客户端信息(浏览器版本等) |
| Accept | 客户端能接受的响应内容类型 |
| Content-Type | 请求体的媒体类型 |
| Authorization | 认证信息(Token、Basic Auth 等) |
| Cookie | 客户端存储的 Cookie |
| Referer | 请求来源页面 |
| Connection | 连接方式(keep-alive 或 close) |
常见响应头:
| 响应头 | 作用 |
|---|---|
| Content-Type | 响应体的媒体类型 |
| Content-Length | 响应体长度 |
| Set-Cookie | 设置 Cookie |
| Cache-Control | 缓存控制 |
| Location | 重定向地址(3xx 状态码时使用) |
| WWW-Authenticate | 认证方式(401 状态码时使用) |
面试加分回答:
HTTP 是无状态的协议(每个请求都是独立的),所以需要用 Cookie/Session 来维护状态。面试时如果能说出”HTTP/1.1 默认开启 keep-alive(长连接),一个 TCP 连接可以发送多个 HTTP 请求”,会非常加分。
Q10:HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0 的区别?
一句话总结:HTTP/1.1 支持了长连接和管道化,HTTP/2.0 支持了多路复用和头部压缩,HTTP/3.0 基于 UDP(QUIC 协议) 解决了队头阻塞问题。
深度解析:
| 版本 | 主要特性 | 存在的问题 |
|---|---|---|
| HTTP/1.0 | 短连接(每个请求都要建立 TCP 连接) | 连接建立开销大 |
| HTTP/1.1 | 长连接(keep-alive)、管道化(可同时发多个请求) | 队头阻塞(一个请求慢,后续请求都要等) |
| HTTP/2.0 | 多路复用(一个 TCP 连接可并发多个请求)、头部压缩、服务器推送 | TCP 队头阻塞(丢包时,所有请求都要等) |
| HTTP/3.0 | 基于 UDP(QUIC 协议)、无队头阻塞、连接迁移 | 部署成本高(需要 UDP 支持) |
队头阻塞问题:
1 | |
面试加分回答:
HTTP/2.0 的多路复用是”解决了 HTTP 层的队头阻塞,但 TCP 层的队头阻塞还在”。HTTP/3.0 基于 QUIC 协议(Google 开发),彻底解决了队头阻塞问题。面试时如果能说出”HTTP/3.0 的连接迁移特性(客户端切换网络时,连接不中断)”,会非常加分。
5. HTTPS 协议
Q11:HTTPS 的工作原理?
一句话总结:HTTPS = HTTP + SSL/TLS,通过非对称加密交换会话密钥,然后用对称加密传输数据,既安全又高效。
深度解析:
1 | |
为什么要用对称加密?为什么不直接用非对称加密?
1 | |
面试加分回答:
HTTPS 握手过程中,证书验证是重点。证书由 CA(证书颁发机构)签发,客户端内置了可信 CA 的根证书,用根证书验证服务器证书的有效性。另外,HTTPS 默认端口是 443,HTTP 默认端口是 80。
Q12:对称加密和非对称加密的区别?
一句话总结:对称加密用同一个密钥加解密(快),非对称加密用公钥加密、私钥解密(慢,但安全)。
深度解析:
| 对比项 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥 | 同一个密钥(加密解密都用它) | 公钥 + 私钥(公钥加密,私钥解密) |
| 速度 | 快 | 慢(100~1000 倍) |
| 安全性 | 密钥分发困难(如何安全地把密钥传给对方?) | 更安全(公钥可以公开,私钥保密) |
| 常见算法 | AES、DES、3DES | RSA、ECC、DSA |
HTTPS 中的使用:
1 | |
面试加分回答:
对称加密的密钥分发问题是”如何用不安全的方式安全地传递密钥”,这是密码学中的经典问题。非对称加密解决了这个问题(公钥可以公开传输,私钥保密)。但实际中,非对称加密很慢,所以 HTTPS 结合了两者的优点。
6. DNS 协议
Q13:DNS 的解析过程?
一句话总结:DNS 解析是递归查询 + 迭代查询结合的过程,从浏览器缓存到本地 DNS 服务器,再到根域名服务器,最终找到目标 IP 地址。
深度解析:
1 | |
递归查询 vs 迭代查询:
1 | |
面试加分回答:
DNS 解析过程是面试高频题。要能说清楚:① 浏览器缓存 ② 操作系统缓存 ③ hosts 文件 ④ 本地 DNS 服务器(递归查询)⑤ 根域名服务器 → 顶级域名服务器 → 权威域名服务器(迭代查询)。另外,DNS 默认用 UDP(端口 53),但如果响应数据超过 512 字节,会用 TCP。
7. ARP 协议
Q14:ARP 协议的作用和工作原理?
一句话总结:ARP(地址解析协议)用于根据 IP 地址获取 MAC 地址,解决”我知道你的 IP,但不知道你的 MAC 地址”的问题。
深度解析:
1 | |
ARP 缓存表:
1 | |
面试加分回答:
ARP 欺骗(ARP Spoofing)是常见的中间人攻击:攻击者发送伪造的 ARP 响应,告诉主机 A”我是 192.168.1.1(网关)”,告诉主机 B”我是 192.168.1.200”,这样主机 A 和 B 的通信都会经过攻击者。防御方法:使用静态 ARP、开启 ARP 检查(DAI)等。
8. IP 协议与子网
Q15:IP 地址的分类?
一句话总结:IP 地址分为 A、B、C、D、E 五类,其中 A、B、C 是常用类,D 类用于组播,E 类保留。
深度解析:
| 分类 | 首字节范围 | 网络号长度 | 主机号长度 | 适用场景 |
|---|---|---|---|---|
| A 类 | 1~126 | 8 位(第一段) | 24 位(后三段) | 大型网络(政府、大企业) |
| B 类 | 128~191 | 16 位(前两段) | 16 位(后两段) | 中型网络(大学、中型企业) |
| C 类 | 192~223 | 24 位(前三段) | 8 位(最后一段) | 小型网络(家庭、小型企业) |
| D 类 | 224~239 | 用于组播(Multicast) | - | 一对多通信(视频会议等) |
| E 类 | 240~255 | 保留(未使用) | - | 实验用途 |
特殊 IP 地址:
1 | |
面试加分回答:
IP 地址分类是现代互联网的早期设计,但浪费严重(比如 B 类网络有 65534 个主机地址,但大多数企业用不完)。现代互联网使用 CIDR(无类别域间路由)来代替分类,可以灵活分配网络前缀长度(如 192.168.1.0/24 表示前 24 位是网络号)。
Q16:子网掩码的作用?如何计算子网?
一句话总结:子网掩码用于区分 IP 地址的网络号和主机号,通过借位可以把一个大网络划分成多个小网络(子网)。
深度解析:
1 | |
CIDR 表示法:
1 | |
子网划分计算:
1 | |
面试加分回答:
子网划分是面试常考题。要能计算:① 给定 IP 地址和子网掩码,求网络地址 ② 给定网络地址和需要的主机数,求子网掩码 ③ 给定网络地址和子网数,求每个子网的范围。另外,全 0 和全 1 的主机号通常不使用(全 0 是网络地址,全 1 是广播地址),所以可用主机数 = 2^主机号位数 - 2。
9. HTTP 状态码
Q17:常见的 HTTP 状态码有哪些?
一句话总结:HTTP 状态码分为 1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误) 五类。
深度解析:
2xx 成功:
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 200 | OK | 请求成功 |
| 201 | Created | 资源创建成功(POST 请求) |
| 204 | No Content | 请求成功,但无返回内容(DELETE 请求) |
| 206 | Partial Content | 部分内容(断点续传) |
3xx 重定向:
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 301 | Moved Permanently | 永久重定向(搜索引擎会更新索引) |
| 302 | Found | 临时重定向(搜索引擎不会更新索引) |
| 304 | Not Modified | 资源未修改(使用缓存) |
| 307 | Temporary Redirect | 临时重定向(不允许改变请求方法) |
| 308 | Permanent Redirect | 永久重定向(不允许改变请求方法) |
4xx 客户端错误:
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 400 | Bad Request | 请求语法错误 |
| 401 | Unauthorized | 未认证(需要登录) |
| 403 | Forbidden | 无权限(登录了但没权限) |
| 404 | Not Found | 资源不存在 |
| 405 | Method Not Allowed | 请求方法不允许(比如用 POST 访问只支持 GET 的接口) |
| 409 | Conflict | 资源冲突(比如重复创建) |
| 429 | Too Many Requests | 请求过于频繁(限流) |
5xx 服务器错误:
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 500 | Internal Server Error | 服务器内部错误 |
| 502 | Bad Gateway | 网关错误(上游服务器返回无效响应) |
| 503 | Service Unavailable | 服务不可用(过载或维护中) |
| 504 | Gateway Timeout | 网关超时(上游服务器响应超时) |
面试加分回答:
301 和 302 的区别是:301 是永久重定向(浏览器会缓存重定向地址,下次直接访问新地址),302 是临时重定向(浏览器不会缓存)。另外,401 和 403 的区别是:401 是”未认证”(用户没登录),403 是”无权限”(用户登录了,但没有权限访问这个资源)。
10. Cookie 与 Session
Q18:Cookie 和 Session 的区别?
一句话总结:Cookie 是客户端存储会话信息,Session 是服务器存储会话信息,Session 通常依赖 Cookie 传递 SessionID。
深度解析:
1 | |
Session 的工作流程:
1 | |
如果客户端禁用 Cookie,Session 还能用吗?
1 | |
面试加分回答:
Cookie 和 Session 的区别是面试必考题。要能说清楚:① 存储位置 ② 安全性 ③ 大小限制 ④ 过期策略。另外,分布式系统中,Session 需要存储在 Redis 等集中式存储中(Session 共享),或者改用 JWT(JSON Web Token)来实现无状态认证。
11. 网络安全
Q19:什么是 CSRF 攻击?如何防御?
一句话总结:CSRF(跨站请求伪造)是攻击者诱导用户点击恶意链接,利用用户的登录状态发起恶意请求,防御方法是验证 Referer、使用 CSRF Token、双重 Cookie 验证。
深度解析:
1 | |
防御方法:
1 | |
面试加分回答:
CSRF 和 XSS 的区别是:CSRF 是利用用户的登录状态发起恶意请求(用户不知情),XSS 是注入恶意脚本到网站中(其他用户访问时,脚本在他们的浏览器中执行)。防御 CSRF 的核心是”验证请求是否来自合法的用户操作”,防御 XSS 的核心是”对用户输入进行转义”。
Q20:什么是 XSS 攻击?如何防御?
一句话总结:XSS(跨站脚本攻击)是攻击者注入恶意脚本到网站中,其他用户访问时,脚本在他们的浏览器中执行,防御方法是对用户输入进行转义、使用 CSP、HttpOnly Cookie。
深度解析:
1 | |
XSS 的类型:
1 | |
防御方法:
1 | |
面试加分回答:
XSS 和 CSRF 的区别是:XSS 是”注入恶意脚本到网站中,其他用户访问时执行”,CSRF 是”利用用户的登录状态发起恶意请求”。防御 XSS 的核心是”对用户输入进行转义和验证”,防御 CSRF 的核心是”验证请求是否来自合法的用户操作”。另外,现代前端框架(如 React、Vue)默认会对插值进行转义,防止 XSS。
12. 高频面试题
Q21:从浏览器输入 URL 到页面加载完成,发生了什么?
一句话总结:DNS 解析 → TCP 三次握手 → 发送 HTTP 请求 → 服务器处理请求并返回 HTTP 响应 → 浏览器解析渲染页面 → TCP 四次挥手。
深度解析:
1 | |
面试加分回答:
这个问题的回答要能体现”深度”:比如 DNS 解析的详细过程、TCP 三次握手的状态变化、浏览器渲染页面的详细步骤(HTML 解析、CSS 解析、JavaScript 执行、渲染树构建、布局、绘制、合成)、TCP 四次挥手的状态变化等。如果能说出”浏览器在同一时间对同一域名的 TCP 连接数有限制(通常是 6 个)”,会非常加分。
Q22:什么是长连接和短连接?
一句话总结:短连接是每次请求都建立新的 TCP 连接,长连接是多个请求复用同一个 TCP 连接。
深度解析:
1 | |
面试加分回答:
HTTP/1.1 默认开启 keep-alive(长连接),HTTP/1.0 默认是短连接(但可以通过
Connection: keep-alive请求头来启用长连接)。另外,长连接不是”永久连接”,服务器通常会有超时时间(如 5 秒无活动就关闭连接)。如果需要”永久连接”,可以用 WebSocket。
Q23:什么是 WebSocket?和 HTTP 的区别?
一句话总结:WebSocket 是全双工通信协议(客户端和服务器可以同时发送数据),HTTP 是请求-响应模式(客户端发送请求,服务器返回响应)。
深度解析:
1 | |
WebSocket 握手过程:
1 | |
面试加分回答:
WebSocket 和 HTTP 的关系:WebSocket 握手时用 HTTP(升级协议),握手完成后就不再用 HTTP 了。另外,WebSocket 默认端口是 80(ws://)和 443(wss://,加密的 WebSocket),和 HTTP/HTTPS 相同,所以不容易被防火墙拦截。
Q24:什么是 HTTP 长轮询和短轮询?
一句话总结:短轮询是客户端定时发送请求询问服务器是否有新数据,长轮询是服务器收到请求后,如果有新数据就立即返回,如果没有就 hold 住请求直到有新数据或超时。
深度解析:
1 | |
面试加分回答:
长轮询和 WebSocket 的区别是:长轮询还是”请求-响应”模式(服务器返回响应后,连接就关闭了,需要客户端重新发起请求),WebSocket 是”长连接”(连接建立后一直保持,服务器可以主动推送数据)。长轮询的优点是兼容性好(不需要浏览器支持 WebSocket),缺点是复杂度高(服务器要管理大量 hold 住的连接)。
Q25:什么是 RESTful API?
一句话总结:RESTful API 是符合 REST 架构风格的 API 设计,核心是”URL 表示资源,HTTP 方法表示操作“。
深度解析:
1 | |
面试加分回答:
RESTful API 和 RPC(如 gRPC)的区别是:RESTful API 基于 HTTP,用 URL 表示资源,用 HTTP 方法表示操作,返回 JSON/XML;RPC 是基于远程过程调用,客户端像调用本地方法一样调用远程方法,通常性能更高(如 gRPC 基于 HTTP/2 和 Protobuf)。RESTful API 适合对外提供公开 API(易于理解、跨语言),RPC 适合内部服务调用(性能高、类型安全)。
计算机网络面试高频问题速查表
| 问题 | 关键词 |
|---|---|
| OSI 七层模型和 TCP/IP 四层模型 | 层级、协议、数据名称 |
| TCP 三次握手 | SYN、ACK、状态变化、为什么要三次 |
| TCP 四次挥手 | FIN、ACK、2MSL、为什么要四次 |
| TCP 可靠传输 | 校验和、序列号、确认应答、超时重传、流量控制、拥塞控制 |
| TCP vs UDP | 连接、可靠性、有序性、效率 |
| HTTP 请求方法 | GET、POST、PUT、DELETE、幂等性 |
| HTTP 状态码 | 2xx、3xx、4xx、5xx |
| HTTP/1.1 vs HTTP/2.0 vs HTTP/3.0 | 长连接、多路复用、队头阻塞、QUIC |
| HTTPS 原理 | SSL/TLS、非对称加密、对称加密、证书 |
| DNS 解析过程 | 递归查询、迭代查询、缓存、hosts 文件 |
| ARP 协议 | IP 转 MAC、ARP 缓存表、ARP 欺骗 |
| 子网掩码 | 网络号、主机号、CIDR、子网划分 |
| Cookie vs Session | 存储位置、安全性、大小限制 |
| CSRF 攻击 | 跨站请求伪造、CSRF Token、SameSite |
| XSS 攻击 | 跨站脚本、转义、CSP、HttpOnly |
| 从输入 URL 到页面加载 | DNS、TCP、HTTP、渲染、TCP 关闭 |
| WebSocket | 全双工、HTTP 升级、实时通信 |
| RESTful API | 资源、HTTP 方法、状态码、JSON |
总结:计算机网络面试准备路线
1 | |
最后的最后:计算机网络的知识点很多,但面试时重点考察的是 TCP(三次握手、四次挥手、可靠传输)、HTTP/HTTPS(请求方法、状态码、HTTPS 原理)、DNS、网络安全(CSRF/XSS)。把这几块彻底搞懂,面试就稳了一大半!
如有错误欢迎指正,祝大家 Offer 拿到手软! 🎉
第 26 题:HTTP 缓存机制(Cache-Control、ETag)?
一句话总结:HTTP 缓存通过 Cache-Control(强缓存) 和 ETag/Last-Modified(协商缓存) 两级机制减少网络传输。
深度解析:
1 | |
面试加分回答:
“我们前端项目用
Cache-Control: max-age=31536000(1 年)配合文件哈希名(如app.a1b2c3d4.js),实现长效缓存。HTML 文件设Cache-Control: no-cache,让浏览器每次都来协商,确保用户能拿到最新的入口文件。另外,ETag 的算法要注意——如果用 inode 作为 ETag 的一部分,多台服务器的 inode 不同,会导致无意义的缓存失效。”
第 27 题:TCP 拥塞控制的四种算法?
一句话总结:TCP 拥塞控制通过 慢启动 → 拥塞避免 → 快速重传 → 快速恢复 四个算法动态调整发送窗口,避免网络过载。
深度解析:
1 | |
面试加分回答:
“TCP BIC 和 CUBIC 是 Linux 的默认拥塞控制算法(CUBIC 用三次函数,比 BIC 更平滑)。弱网环境(如 4G/5G 切换)建议用 BBR(Google 开发),它能区分’丢包是因为网络拥塞’还是’链路质量问题’,在弱网下吞吐量比 CUBIC 高 2~5 倍。我们视频服务在移动网络下切换到 BBR 后,卡顿率下降了 40%。”
第 28 题:ICMP 协议是干什么的?Ping 的原理?
一句话总结:ICMP(Internet Control Message Protocol)是用来传递网络诊断和控制信息的协议;ping 用的是 ICMP Echo Request/Reply 报文。
深度解析:
1 | |
面试加分回答:
“ICMP 在云环境里常被安全组误封——我们曾遇到跨 VPC Ping 不通的问题,排查了半天发现是安全组没放通 ICMP 协议(只放了 TCP 22 和 80)。另外,生产环境建议禁止 ICMP Timestamp Request(类型 13),因为它可以被用来做网络探测(暴露网络内部结构)。”
第 29 题:HTTP/2 的多路复用是什么?和 HTTP/1.1 比有什么优势?
一句话总结:HTTP/2 通过 二进制分帧层 实现了多路复用(一个 TCP 连接上并发多个请求/响应),解决了 HTTP/1.1 的队头阻塞问题。
深度解析:
1 | |
面试加分回答:
“我们网站从 HTTP/1.1 升级到 HTTP/2 后,首屏加载时间从 2.8s 降到了 1.6s(主要收益是少了多次 TCP 握手和慢启动)。但要注意:HTTP/2 的多路复用要求所有请求走同一个域名(共享一个 TCP 连接),如果你的静态资源分布在多个域名下,HTTP/2 的优势会被抵消。我们的解法是把静态资源统一到 CDN 的一个域名下,并开启 HTTP/2。”
第 30 题:网络故障排查的常用工具和命令?
一句话总结:ping(连通性)→ traceroute/tracert(路由路径)→ netstat/ss(本机连接)→ tcpdump/Wireshark(抓包分析)→ nslookup/dig(DNS 解析)。
深度解析:
| 工具 | 用途 | 常用命令 |
|---|---|---|
| ping | 测试连通性、查看 RTT | ping -c 4 www.baidu.com |
| traceroute (Linux) / tracert (Windows) | 查看路由路径,定位哪一跳丢包 | traceroute www.baidu.com |
| netstat / ss | 查看本机 TCP 连接、监听端口 | netstat -tlnp / ss -tlnp |
| tcpdump | 命令行抓包 | tcpdump -i eth0 port 80 -n |
| Wireshark | 图形化抓包分析(功能最强) | 打开 pcap 文件分析 |
| nslookup / dig | DNS 解析排查 | dig www.baidu.com +trace |
| curl -v | 查看 HTTP 请求全过程 | curl -v http://www.baidu.com |
| iperf | 测试网络带宽 | iperf -c server_ip |
面试加分回答:
“我们生产环境有一套标准的网络故障排查 SOP:① 先
ping确认连通性 ② 不通的话traceroute看哪一跳丢了 ③ 通的但慢,用tcpdump抓包看是不是有大量重传 ④ 如果是 DNS 问题,dig +trace可以看到完整解析链。另外推荐mtr(结合 ping 和 traceroute),能持续监控每跳的丢包率,比单次 traceroute 更可靠。”
计算机网络 30 题完结! 建议把这些题结合实践理解,光背八股效果有限。
第 31 题:HTTP/3 和 QUIC 协议是什么?解决了 HTTP/2 的什么问题?
一句话结论
HTTP/3 基于 QUIC 协议(运行在 UDP 上),解决了 HTTP/2 的队头阻塞问题(TCP 丢包会阻塞所有流),并实现了0-RTT 连接建立(比 TCP + TLS 快)。
深度解析
HTTP/2 的问题(队头阻塞):
1 | |
HTTP/3 的解决方案(基于 QUIC,运行在 UDP 上):
1 | |
QUIC 的核心优势:
| 优势 | 说明 |
|---|---|
| 无队头阻塞 | 基于 UDP,丢包只影响当前流 |
| 0-RTT 连接建立 | 缓存过的客户端可以 0-RTT 发送数据(TCP + TLS 需要 3-RTT) |
| 连接迁移 | 客户端切换网络(如 Wi-Fi → 4G),连接不中断(TCP 用四元组标识连接,QUIC 用 Connection ID) |
| 内置加密 | QUIC 自带加密(类似 TLS 1.3),不需要额外的 TLS 层 |
HTTP/1.1 → HTTP/2 → HTTP/3 的演进:
1 | |
面试加分回答
HTTP/3 是未来的方向,但目前(2026 年)HTTP/2 仍然是主流(HTTP/3 的部署需要 CDN 和浏览器同时支持)。实际项目中,如果你的用户主要在弱网环境(如移动网络),可以优先考虑 HTTP/3(QUIC 在丢包率高的网络下表现远好于 TCP)。另外,HTTP/3 的 0-RTT 连接建立能显著减少首屏时间(尤其在 HTTPS 场景下)。
第 32 题:DNS 的解析过程是什么?(递归查询 vs 迭代查询)
一句话结论
DNS 解析过程:浏览器缓存 → 系统缓存 → 本地 DNS(递归查询)→ 根 DNS → 顶级域 DNS → 权威 DNS(迭代查询)。核心是递归查询(本地 DNS 帮你问到底)和迭代查询(每个 DNS 只返回下一个该问谁)。
深度解析
DNS 解析全过程(访问 www.baidu.com):
1 | |
递归查询 vs 迭代查询:
| 查询方式 | 说明 | 谁发起 |
|---|---|---|
| 递归查询 | 你只问一次,DNS 帮你问到底 | 客户端 → 本地 DNS |
| 迭代查询 | 每个 DNS 只返回”下一个该问谁”,你自己去问 | 本地 DNS → 根 DNS → 顶级域 DNS → 权威 DNS |
DNS 缓存的层级:
1 | |
面试加分回答
DNS 解析是网络优化的第一环。实际项目中,可以用DNS 预解析(
<link rel="dns-prefetch" href="//example.com">)提前解析域名,减少用户点击链接后的等待时间。另外,DNS 劫持是常见的安全问题(运营商劫持 DNS,返回假的 IP),解决方法是用 DNS over HTTPS(DoH) 或 DNS over TLS(DoT) 加密 DNS 查询。
第 33 题:HTTPS 的证书链验证过程?
一句话结论
HTTPS 证书链验证:浏览器用内置的根证书(CA)验证中间证书,再用中间证书验证服务器证书,形成一条信任链。只要链上每个证书都有效,就信任服务器。
深度解析
证书链的结构:
1 | |
验证过程(访问 https://www.baidu.com):
1 | |
为什么需要中间证书?
1 | |
面试加分回答
证书链验证是 HTTPS 的信任基础。面试中,如果问到”为什么我们能信任 HTTPS 网站?”,回答就是:因为浏览器内置了受信任的根证书(CA),通过这些根证书形成的信任链,我们可以验证任何服务器的身份。另外,实际部署 HTTPS 时,一定要配置完整的证书链(服务器证书 + 中间证书),否则旧版本的 Android 或 Java 客户端会报”证书不可信”的错误。
第 34 题:TCP 的 keep-alive 和 HTTP 的 keep-alive 区别?
一句话结论
TCP keep-alive:探测对端是否还活着(防止连接被中间设备断开);HTTP keep-alive(HTTP/1.0 的
Connection: keep-alive):一个 TCP 连接上发送多个 HTTP 请求(避免重复建立 TCP 连接)。两者完全没关系!
深度解析
TCP keep-alive(传输层):
1 | |
HTTP keep-alive(应用层,HTTP/1.0):
1 | |
对比:
| 对比项 | TCP keep-alive | HTTP keep-alive |
|---|---|---|
| 层级 | 传输层(TCP) | 应用层(HTTP) |
| 目的 | 探测对端是否还活着 | 复用 TCP 连接(减少握手开销) |
| 默认状态 | 默认关闭(需要应用层开启) | HTTP/1.1 默认开启 |
| 配置方式 | setsockopt(SO_KEEPALIVE) |
Connection: keep-alive |
面试加分回答
TCP keep-alive 和 HTTP keep-alive 是完全不同的两个东西(一个在传输层,一个在应用层),但名字很像,容易被混淆。实际项目中,HTTP 服务(如 Nginx)通常都会配置 keep-alive 超时时间(
keepalive_timeout),避免空闲连接占用资源。而 TCP keep-alive 通常用于长连接场景(如 WebSocket、数据库连接池),防止连接被中间设备(NAT)断开。
第 35 题:WebSocket 的原理和适用场景?
一句话结论
WebSocket 是 HTML5 提供的全双工通信协议(基于 TCP),客户端和服务器可以互相主动发送消息(HTTP 只能客户端主动请求)。适用场景:实时聊天、股票行情推送、在线游戏。
深度解析
HTTP 的局限(只能客户端主动请求):
1 | |
WebSocket 的解决方案(全双工通信):
1 | |
WebSocket 的适用场景:
| 场景 | 为什么用 WebSocket | 替代方案 |
|---|---|---|
| 实时聊天 | 服务器要主动推送消息给客户端 | HTTP 长轮询(延迟高) |
| 股票行情推送 | 行情变化频繁,需要实时推送 | HTTP 轮询(浪费带宽) |
| 在线游戏 | 低延迟(毫秒级) | WebRTC(更复杂) |
| 协同编辑(如腾讯文档) | 多个用户实时同步 | WebSocket + CRDT |
面试加分回答
WebSocket 是实时通信的首选方案。但要注意:WebSocket 是有状态协议(每个连接都要服务器维护状态),如果用户量很大(如 100 万并发连接),服务器的内存压力会很大。这种场景下,可以考虑 WebSocket + 消息队列(如用 Redis Pub/Sub 做消息分发)或者用 gRPC Bidirectional Streaming(基于 HTTP/2,性能更好)。
第 36 题:RESTful API 的设计规范?
一句话结论
RESTful API 的核心思想:用 URL 表示资源,HTTP 方法表示操作,
/users/1表示”ID 为 1 的用户”,GET /users/1表示”获取这个用户”。
深度解析
RESTful API 的设计规范:
| HTTP 方法 | URL | 含义 |
|---|---|---|
| GET | /users |
获取用户列表 |
| GET | /users/1 |
获取 ID=1 的用户 |
| POST | /users |
创建新用户 |
| PUT | /users/1 |
更新 ID=1 的用户(全量更新) |
| PATCH | /users/1 |
更新 ID=1 的用户(部分更新) |
| DELETE | /users/1 |
删除 ID=1 的用户 |
❌ 不推荐的写法(RPC 风格):
1 | |
✅ 推荐的写法(RESTful 风格):
1 | |
RESTful API 的版本管理:
1 | |
面试加分回答
RESTful API 是目前最主流的 API 设计风格。但实际项目中,不必死守 RESTful 规范——有些操作不适合用 CRUD(如”用户登录”
POST /sessions、POST /login更符合直觉)。另外,GraphQL 是 RESTful 的有力竞争者:它允许客户端指定需要哪些字段(避免 over-fetching 和 under-fetching),适合字段多、客户端需求多样的场景(如移动端和 Web 端需要的字段不同)。
第 37 题:跨域(CORS)的原理和解决方案?
一句话结论
跨域(CORS):浏览器禁止页面向不同域名的服务器发请求(同源策略)。解决方式:① 服务器设置 CORS 响应头;② 用 Nginx 反向代理(把跨域变成同域);③ JSONP(只支持 GET,已过时)。
深度解析
同源策略(Same-Origin Policy):
1 | |
CORS(Cross-Origin Resource Sharing)的原理:
1 | |
CORS 的响应头:
1 | |
解决方案:
| 方案 | 适用场景 | 示例 |
|---|---|---|
| CORS 响应头 | 服务器可以改(推荐) | response.setHeader("Access-Control-Allow-Origin", "*") |
| Nginx 反向代理 | 服务器不能改 | location /api/ { proxy_pass http://backend; } |
| JSONP | 只支持 GET(已过时) | <script src="http://api.com?callback=foo"> |
面试加分回答
CORS 是浏览器的安全机制(服务器默认不限制跨域,是浏览器拦截了响应)。所以,如果你用 Postman 或 curl 测试,不会出现跨域错误(因为它们不是浏览器)。实际项目中,最方便的跨域解决方案是Nginx 反向代理(把跨域请求变成同域请求),这样就不需要在每个接口都配置 CORS 响应头了。
第 38 题:CDN 的原理和缓存策略?
一句话结论
CDN(Content Delivery Network):把静态资源缓存到离用户最近的边缘节点,用户请求静态资源时,直接从边缘节点获取(不需要回源到 origin server),减少延迟、减轻源站压力。
深度解析
没有 CDN(所有用户都请求源站):
1 | |
有 CDN(用户请求最近的边缘节点):
1 | |
CDN 的缓存策略:
1 | |
CDN 的适用场景:
| 资源类型 | 是否适合 CDN | 原因 |
|---|---|---|
| 静态资源(图片、CSS、JS) | ✅ 适合 | 不常变,适合长期缓存 |
| HTML 文件 | ⚠️ 看情况 | 如果 HTML 包含动态内容,不适合缓存 |
| API 响应 | ❌ 不适合 | 数据实时变化,缓存没意义 |
| 大文件下载(安装包、视频) | ✅ 适合 | 节省源站带宽 |
面试加分回答
CDN 是前端性能优化的核心手段之一。实际项目中,CDN 通常和对象存储(如阿里云 OSS、腾讯云 COS)配合使用:静态资源上传到对象存储,CDN 回源到对象存储(不回源到你的服务器)。另外,CDN 也能防御 DDoS 攻击(攻击流量会被 CDN 的边缘节点吸收,不会打到源站)。
第 39 题:网络分层模型(OSI 七层 vs TCP/IP 四层)?
一句话结论
OSI 七层模型(理论标准):物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层;TCP/IP 四层模型(实际实现):网络接口层 → 网络层 → 传输层 → 应用层。面试重点掌握TCP/IP 四层就够了。
深度解析
OSI 七层模型 vs TCP/IP 四层模型:
1 | |
每一层的作用:
| 层级 | 协议 | 作用 |
|---|---|---|
| 应用层 | HTTP、HTTPS、FTP、DNS、SMTP | 应用程序之间的通信(用户能感知的协议) |
| 传输层 | TCP、UDP | 端到端的通信(端口号、可靠传输) |
| 网络层 | IP、ICMP、ARP | 主机到主机的通信(IP 地址、路由) |
| 网络接口层 | Ethernet、Wi-Fi | 物理传输(MAC 地址、网卡) |
数据封装过程(发送方):
1 | |
面试加分回答
OSI 七层模型是理论标准(实际上没有严格执行),TCP/IP 四层模型是实际实现(互联网的基础)。面试中,重点掌握每一层的核心协议(应用层:HTTP/DNS;传输层:TCP/UDP;网络层:IP/ICMP)就足够了。另外,网络排错通常也是按层级从下往上查:先查物理层(网线插好了吗?),再查网络层(IP 配对了吗?),再查传输层(端口通了吗?),再查应用层(HTTP 状态码是 200 吗?)。
第 40 题:ARP 协议的原理(IP 转 MAC)?
一句话结论
ARP(Address Resolution Protocol):根据 IP 地址获取 MAC 地址(因为数据链路层通信需要 MAC 地址,但应用层只知道 IP 地址)。核心流程:广播 ARP 请求 → 目标主机单播 ARP 响应。
深度解析
为什么需要 ARP?
1 | |
ARP 的工作流程(主机 A 要访问主机 B):
1 | |
ARP 缓存:
1 | |
面试加分回答
ARP 协议是局域网通信的基础。但要注意:ARP 协议不安全(没有认证机制),容易被 ARP 欺骗(ARP Spoofing):攻击者伪造 ARP 响应,告诉主机 A”我就是 192.168.1.1”,从而劫持主机 A 的流量。防范方法是静态绑定 IP-MAC 映射(不靠 ARP,手动配置)或用 ARP 防火墙。
第 41 题:DHCP 协议的原理(动态分配 IP)?
一句话结论
DHCP(Dynamic Host Configuration Protocol):自动给局域网内的主机分配 IP 地址(避免手动配置 IP 的麻烦)。核心流程:DISCOVER(广播)→ OFFER(单播)→ REQUEST(广播)→ ACK(单播)。
深度解析
DHCP 的工作流程(新主机加入局域网):
1 | |
DHCP 分配的 IP 有租期:
1 | |
DHCP 分配的额外信息:
1 | |
面试加分回答
DHCP 是局域网自动配置 IP 的核心协议。实际项目中,如果你的服务器需要固定 IP(如数据库服务器、Redis 服务器),应该配置静态 IP(手动配置,不由 DHCP 分配),否则 IP 变化会导致其他服务连不上。另外,DHCP 也容易被攻击(DHCP Starvation Attack:攻击者大量申请 IP,把 DHCP 服务器的 IP 池耗尽),防范方法是DHCP Snooping(交换机只转发信任的 DHCP 服务器的响应)。
第 42 题:NAT(网络地址转换)的原理?
一句话结论
NAT(Network Address Translation):把内网 IP(如 192.168.1.100)转成公网 IP(如 1.2.3.4),让多台内网主机共享一个公网 IP 上网。解决 IPv4 地址不足的问题。
深度解析
为什么需要 NAT?
1 | |
NAT 的工作原理:
1 | |
NAT 的映射表:
1 | |
NAT 的局限:
1 | |
面试加分回答
NAT 是IPv4 地址不足的临时解决方案(IPv6 有 128 位地址,不需要 NAT)。但 NAT 也有副作用:破坏了端到端通信(公网不能主动访问内网),导致 P2P 下载、IP 电话等应用需要NAT 穿透(STUN、TURN、ICE 协议)。另外,IPv6 不需要 NAT(每个设备都有公网 IP),这也是为什么 IPv6 是未来方向。
第 43 题:对称加密 vs 非对称加密?
一句话结论
对称加密:加密和解密用同一个密钥(快,但密钥分发困难);非对称加密:加密用公钥,解密用私钥(慢,但解决了密钥分发问题)。HTTPS 同时用了两者(非对称加密协商会话密钥,对称加密传输数据)。
深度解析
对称加密(如 AES、DES):
1 | |
非对称加密(如 RSA、ECC):
1 | |
HTTPS 为什么同时用两者?
1 | |
面试加分回答
对称加密和非对称加密是互补的:对称加密快但密钥分发困难,非对称加密慢但解决了密钥分发问题。HTTPS 的设计非常巧妙:用非对称加密安全地协商会话密钥,然后用对称加密高速传输数据。另外,RSA 正在被 ECC(椭圆曲线加密)取代(相同安全强度下,ECC 的密钥更短,性能更好)。TLS 1.3 已经把 RSA 密钥交换列为”不建议使用”。
第 44 题:中间人攻击(MITM)的原理和防范?
一句话结论
中间人攻击(MITM):攻击者在通信双方之间插入自己(冒充服务器骗客户端、冒充客户端骗服务器),从而窃听或篡改通信内容。防范方法:HTTPS + 证书校验(客户端校验服务器的证书是否可信)。
深度解析
中间人攻击的原理:
1 | |
中间人攻击的实现方式:
| 实现方式 | 说明 |
|---|---|
| ARP 欺骗 | 攻击者伪造 ARP 响应,告诉客户端”我就是网关”(从而劫持客户端的流量) |
| DNS 劫持 | 攻击者篡改 DNS 响应,把目标域名解析到自己的 IP |
| 伪造证书 | 攻击者自己签发一个假证书(客户端如果不校验证书,就会中招) |
防范方法:
1 | |
面试加分回答
中间人攻击是公共 Wi-Fi 的最大威胁(攻击者可以在同一 Wi-Fi 下发起 ARP 欺骗,劫持其他用户的流量)。防范方法是:不要用公共 Wi-Fi 访问敏感网站(如网银),或者用 VPN(所有流量走加密隧道)。另外,Android 7.0+ 默认不信任用户安装的证书(防止恶意证书发起中间人攻击),这是一个很重要的安全改进。
第 45 题:VPN 的原理?
一句话结论
VPN(Virtual Private Network):在公共网络上建立加密隧道,让远程用户像在局域网内一样访问内网资源。核心原理:数据包封装(把原始数据包加密后,封装在另一个数据包中传输)。
深度解析
VPN 的工作流程:
1 | |
VPN 的封装过程:
1 | |
常见 VPN 协议:
| 协议 | 速度 | 安全性 | 适用场景 |
|---|---|---|---|
| IPsec | 中 | 高 | 企业 VPN(支持加密和认证) |
| SSL VPN(如 OpenVPN) | 快 | 高 | 远程办公(基于 SSL/TLS) |
| WireGuard | 很快 | 高 | 新一代 VPN(代码量小,性能好) |
| PPTP | 快 | 低(已不安全) | 不推荐(容易被破解) |
面试加分回答
VPN 的核心价值是远程办公(让员工在家也能安全访问公司内网)。但实际项目中,VPN 不是唯一选择——零信任架构(Zero Trust) 正在取代传统 VPN:不再默认信任内网设备,而是对每个访问请求都做身份认证和权限校验(无论请求来自内网还是外网)。Google 的 BeyondCorp 就是零信任架构的经典案例。
第 46 题:网络性能优化(DNS 预解析、TCP 优化、HTTP/2 推送)?
一句话结论
网络性能优化的核心思路:减少延迟(用 CDN、HTTP/2 多路复用)、减少传输量(压缩、缓存)、减少连接建立开销(TCP 优化、TLS 1.3 0-RTT)。
深度解析
优化一:DNS 预解析(减少 DNS 查询延迟):
1 | |
优化二:TCP 优化(减少 TCP 握手开销):
1 | |
优化三:TLS 1.3(减少 TLS 握手开销):
1 | |
优化四:HTTP/2 服务端推送(减少客户端请求次数):
1 | |
面试加分回答
网络性能优化的最重要的是度量(不要盲目优化)。推荐用 WebPageTest(https://www.webpagetest.org/)或 Chrome DevTools 的 Network 面板分析页面的加载性能(首屏时间、TTI、TPS 等),找到瓶颈再优化。另外,HTTP/3(QUIC) 是未来的方向(0-RTT 连接建立 + 无队头阻塞),如果你的用户主要在移动网络,升级到 HTTP/3 会有显著的性能提升。
第 47 题:实际网络故障排查案例?
一句话结论
网络故障排查的通用流程:从底层到高层逐一排查(物理层 → 数据链路层 → 网络层 → 传输层 → 应用层)。常用工具:
ping(连通性)、traceroute(路由路径)、netstat(端口监听)、tcpdump(抓包分析)。
深度解析
案例一:服务器 ping 不通(网络层问题):
1 | |
案例二:可以 ping 通,但端口不通(传输层/应用层问题):
1 | |
案例三:TCP 连接数爆满(传输层问题):
1 | |
面试加分回答
网络故障排查是运维/后端开发的必备技能。面试中,如果能说出从底层到高层逐一排查的思路,以及常用工具(ping、traceroute、netstat、tcpdump、Wireshark),就已经超过 80% 的候选人了。另外,tcpdump 抓包分析是最高级的排查手段(能看到每个数据包的详细信息),建议每个后端开发都学一下。
第 48 题:HTTP 状态码全家桶(1xx ~ 5xx)?
一句话结论
HTTP 状态码分为 5 类:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。面试最高频:200、301/302、304、400、401、403、404、500、502、503、504。
深度解析
2xx(成功):
| 状态码 | 说明 |
|---|---|
| 200 OK | 请求成功 |
| 201 Created | 创建成功(POST 请求创建资源) |
| 204 No Content | 成功但没有响应体(DELETE 请求) |
| 206 Partial Content | 部分内容(断点续传) |
3xx(重定向):
| 状态码 | 说明 |
|---|---|
| 301 Moved Permanently | 永久重定向(SEO 会把旧 URL 的权重转移到新 URL) |
| 302 Found | 临时重定向(SEO 不会转移权重) |
| 304 Not Modified | 协商缓存命中(服务器告诉客户端”用本地缓存”) |
4xx(客户端错误):
| 状态码 | 说明 |
|---|---|
| 400 Bad Request | 请求格式错误(如 JSON 格式不对) |
| 401 Unauthorized | 未认证(没有登录) |
| 403 Forbidden | 无权限(登录了但没有权限) |
| 404 Not Found | 资源不存在 |
| 405 Method Not Allowed | 请求方法不允许(如用 POST 访问只支持 GET 的接口) |
| 429 Too Many Requests | 请求频率超限(限流) |
5xx(服务器错误):
| 状态码 | 说明 |
|---|---|
| 500 Internal Server Error | 服务器内部错误(代码 Bug) |
| 502 Bad Gateway | 网关错误(如 Nginx 连不上后端服务) |
| 503 Service Unavailable | 服务不可用(如服务正在重启) |
| 504 Gateway Timeout | 网关超时(如 Nginx 等待后端服务超时) |
面试加分回答
HTTP 状态码是前后端联调的基础。面试中,除了能说出常见状态码的含义,最好还能说出如何选择合适的状态码(如”用户未登录”应该用 401 还是 403?答案是 401,因为 403 是”无权限”,用户连登录都没登录,谈不上权限)。另外,429 Too Many Requests 是限流的标准响应码,实际项目中建议用这个状态码而不是自定义的(如 500 或 403)。
第 49 题:HTTP 请求头和响应头的常用字段?
一句话结论
常用请求头:
Host(虚拟主机)、User-Agent(客户端标识)、Accept(接受的响应格式)、Authorization(认证信息)、Cookie(会话标识);常用响应头:Content-Type(响应格式)、Set-Cookie(设置 Cookie)、Cache-Control(缓存策略)、Location(重定向目标)。
深度解析
常用请求头:
| 请求头 | 说明 | 示例 |
|---|---|---|
Host |
目标主机名(虚拟主机) | Host: www.example.com |
User-Agent |
客户端标识 | User-Agent: Mozilla/5.0 ... |
Accept |
接受的响应格式 | Accept: application/json |
Authorization |
认证信息 | Authorization: Bearer xxxxxx |
Cookie |
Cookie(会话标识) | Cookie: sessionId=abc123 |
Content-Type |
请求体的格式 | Content-Type: application/json |
Content-Length |
请求体的长度 | Content-Length: 123 |
常用响应头:
| 响应头 | 说明 | 示例 |
|---|---|---|
Content-Type |
响应体的格式 | Content-Type: application/json; charset=utf-8 |
Content-Length |
响应体的长度 | Content-Length: 456 |
Set-Cookie |
设置 Cookie | Set-Cookie: sessionId=abc123; HttpOnly |
Cache-Control |
缓存策略 | Cache-Control: max-age=3600 |
Location |
重定向目标(3xx 响应) | Location: https://www.example.com/new-url |
ETag |
资源版本标识(协商缓存) | ETag: "abc123" |
面试加分回答
HTTP 请求头和响应头是前后端通信的核心。面试中,如果问到”如何防止 XSS 攻击?”,其中一个答案是设置 Cookie 的 HttpOnly 属性(
Set-Cookie: sessionId=abc123; HttpOnly)——这样 JavaScript 就无法读取 Cookie(阻止 XSS 攻击窃取 Cookie)。另外,Content-Security-Policy(CSP)响应头也是防范 XSS 的重要手段(限制页面可以加载哪些资源)。
第 50 题:网络安全(XSS、CSRF、SQL 注入)的原理和防范?
一句话结论
XSS(跨站脚本攻击):攻击者在页面注入恶意脚本(偷 Cookie、钓鱼);CSRF(跨站请求伪造):攻击者诱导用户点击链接,利用用户的登录状态发起恶意请求;SQL 注入:攻击者构造恶意 SQL(绕过认证、拖库)。防范方法:输入校验 + 输出转义 + 预编译 SQL。
深度解析
XSS(跨站脚本攻击):
1 | |
CSRF(跨站请求伪造):
1 | |
SQL 注入:
1 | |
面试加分回答
XSS、CSRF、SQL 注入是 Web 安全的三大经典攻击。实际项目中,如果用现代 Web 框架(如 Spring Boot、Django、Express),这些框架已经内置了防范机制(如 Spring Boot 的 Thymeleaf 会自动转义输出、MyBatis 用
#{}预编译 SQL)。但如果你用原生 Servlet 或自己拼接 SQL,就要非常小心——这也是为什么面试中会问这些安全问题(考察你是否知道如何防范)。