HTTP 与浏览器全过程

共 20 题
#

1. 从浏览器输入 URL 到页面展示的完整过程,DNS、TCP/TLS、HTTP、渲染各阶段的关键细节如何?

A 浏览器在渲染前一定会完成完整的 TCP 三次握手与 TLS 握手,即使存在连接复用
B 渲染过程先合成再布局,绘制发生在布局之前
C JavaScript 使用 async 属性会阻塞 DOM 解析,反而降低渲染速度
D 强缓存命中时浏览器直接使用本地缓存,不再发起网络请求 ✓ 正确答案
#

2. HTTP 常见状态码语义辨析,301/302/304、401/403、502/503/504 的准确区别与排查指向如何?

A 502 表示网关收到上游无效响应,504 表示网关等待上游超时 ✓ 正确答案
B 401 表示请求已认证但无权访问,403 表示未认证
C 302 永久重定向会被浏览器缓存,后续请求直接访问新地址
D 304 表示资源已修改,需要重新下载完整内容
#

3. GET 与 POST 的本质区别,幂等性、缓存、编码与"长度限制"的真相如何?

A GET 是安全且幂等的,可被缓存和书签收藏;POST 不保证幂等,通常不可缓存 ✓ 正确答案
B URL 长度限制是 HTTP 协议规定的,与客户端和服务器无关
C POST 只能使用 URL 编码,不能使用 JSON 格式
D GET 与 POST 在语义上完全相同,只是传输方式不同
#

4. 从输入 URL 到页面渲染的完整过程,每一步的缓存与优化机会在哪里?

A 缓存只存在于浏览器层,DNS 和服务器层无法优化
B 通过 dns-prefetch 预解析、TLS 会话复用、HTTP 缓存与关键渲染路径优化可降低各阶段时延 ✓ 正确答案
C 使用 async 加载脚本会阻塞 DOM 解析,应避免
D 压缩传输(gzip/br)只降低服务器负载,不影响传输时延
#

5. CORS 预检(preflight)机制,哪些请求会触发 OPTIONS 预检,简单请求与预检请求的判定条件如何?

A 所有跨域请求都会触发 OPTIONS 预检
B 带自定义头的跨域请求会触发 OPTIONS 预检,询问服务器允许的方法与头 ✓ 正确答案
C 使用 application/json 的 POST 请求属于简单请求,不会触发预检
D 预检请求由服务器主动发起,用于确认浏览器身份
#

6. 浏览器同源策略的边界,同源的定义,哪些资源加载不受同源限制(img/script/link),与 CORS 的配合关系如何?

A 同源判定只需域名相同,协议和端口不同不影响
B script 标签可以加载任意域名的脚本,且脚本能自由读取跨域页面数据
C CORS 是浏览器的默认机制,无需服务器配合即可放行跨域请求
D 同源策略默认限制跨域读取,IMG/SCRIPT/LINK 等资源加载不受同源限制 ✓ 正确答案
#

7. HTTP/1.1、HTTP/2、HTTP/3 的演进主线,队头阻塞在每一代如何被部分解决?

A HTTP/1.1 通过二进制分帧实现了连接上的多路复用
B HTTP/2 实现了流隔离,一个流丢包不影响其他流
C HTTP/3 仍基于 TCP,无法解决队头阻塞
D HTTP/2 多路复用解决了 HTTP 层队头阻塞,但仍受 TCP 层队头阻塞影响 ✓ 正确答案
#

8. Cookie、Session、Token(JWT)三种会话保持机制的对比?

A JWT 可以随时主动撤销,无需任何额外机制
B Session 状态存于客户端,服务器无需维护任何状态
C Cookie 可以任意存储敏感凭证,且不受大小限制
D JWT 是无状态自包含令牌,服务器验签即可识别用户,无需服务端存储会话 ✓ 正确答案
#

9. HTTP 缓存协商(ETag/Last-Modified)与启发式缓存的工作机制?

A ETag 是资源内容指纹,比 Last-Modified 更精确,优先级更高 ✓ 正确答案
B 强缓存命中时浏览器仍会向服务器发送请求验证
C 启发式缓存是浏览器依据服务器明确设置的缓存头精确计算的有效期
D Last-Modified 能精确处理秒级内内容变化的情况
#

10. 浏览器的渲染管线,DOM/CSSOM/布局/绘制/合成如何衔接?

A 布局(Layout)发生在构建 DOM 树之前
B 渲染树包含所有 DOM 节点,包括隐藏元素
C 重绘(Repaint)比重排(Reflow)代价更高
D 使用 transform 和 opacity 触发合成,通常不触发重排,性能更高 ✓ 正确答案
#

11. HTTP 分块传输编码(chunked)与 Content-Length,流式响应时为什么不能使用 Content-Length?

A 流式响应时服务器能预知总长度,因此必须使用 Content-Length
B chunked 与 Content-Length 可以同时使用,以 Content-Length 为准
C chunked 编码以"0 长度块"作为响应结束标志,接收方按块长度解析 ✓ 正确答案
D chunked 编码仅用于静态资源响应,动态响应无法使用
#

12. HTTP 方法的安全性与幂等性,GET/HEAD/OPTIONS 安全、PUT/DELETE 幂等而 POST 不幂等,对缓存与重试的影响如何?

A GET 安全但非幂等,PUT 幂等但非安全
B DELETE 非幂等,重复删除会产生不同结果
C POST 非安全且非幂等,重试可能导致重复副作用,需应用层幂等设计 ✓ 正确答案
D OPTIONS 非安全方法,用于修改服务器状态
#

13. DNS 解析的缓存层级与 TTL 对故障恢复的影响?

A TTL 越大,DNS 记录变更后各缓存层收敛越快
B TTL 设为零会立即生效,且不会增加权威服务器负载
C DNS 只存在浏览器一层缓存,不存在递归与系统缓存
D 故障切换时,即使权威服务器已更新,客户端仍可能因缓存按旧 TTL 访问旧 IP ✓ 正确答案
#

14. Cookie 与 Session,SameSite、HttpOnly 与跨域携带如何处理?

A 跨域请求携带 Cookie 时,Access-Control-Allow-Origin 可以设置为通配符 *
B SameSite 属性用于控制 Cookie 的大小,与跨站请求无关
C HttpOnly 属性使 Cookie 无法被 JavaScript 读取,可防止 XSS 窃取会话 ✓ 正确答案
D Secure 属性只影响 Cookie 的存储位置,不影响传输
#

15. HTTPS 握手与证书,TLS 1.3 的简化握手如何工作?

A TLS 1.3 在 ClientHello 中携带密钥共享,可实现 1-RTT 简化握手 ✓ 正确答案
B TLS 1.3 握手需要 2-RTT,与 TLS 1.2 相同
C TLS 1.3 保留了 RSA 密钥交换等不安全套件
D 0-RTT 数据绝对安全,不存在重放风险
#

16. HTTP Keep-Alive 与连接复用,Keep-Alive 超时与最大请求数限制,连接池在浏览器与服务器的不同实现如何?

A Keep-Alive 关闭后,每次请求仍需重新建立 TCP 连接 ✓ 正确答案
B 服务器为保持连接设置超时与最大请求数限制,主要是为了无限延长连接复用
C HTTP/2 仍使用多连接复用,无法单连接多路复用
D 浏览器连接池规模与服务器相同,都面向海量并发连接
#

17. HTTP 内容协商,Accept/Accept-Language/Accept-Encoding 如何参与协商,Vary 头对缓存有何影响?

A Accept-Encoding 声明可接受的压缩编码,服务器据此选择 gzip/br 等 ✓ 正确答案
B Vary 头用于声明缓存可以忽略哪些请求头,不受其影响
C 内容协商只涉及媒体类型,不涉及语言和编码
D 设置 Vary 头后缓存会忽略 Accept-Encoding,直接命中
#

18. HTTPS 证书链验证流程,客户端如何校验证书链、吊销状态(CRL/OCSP)与中间人攻击的关系如何?

A 客户端只需验证服务器证书的有效期,无需验证域名与签名
B OCSP 是实时查询证书吊销状态的方式,比 CRL 更及时 ✓ 正确答案
C 中间人攻击与证书验证无关,只要加密即可防御
D 证书链只需验证服务器证书,无需验证到根证书
#

19. HTTP/2 与 HTTP/3 在连接复用与流控上的工程差异,连接迁移(connection migration)如何解决移动网络切换?

A HTTP/2 实现了流隔离,一个流丢包不影响其他流
B HTTP/3 无法实现多路复用,每个流独占一个连接
C HTTP/2 基于 TCP,也能实现连接迁移
D HTTP/3 基于 QUIC,使用连接 ID 标识连接,切换网络后 IP 变化仍可维持连接 ✓ 正确答案
#

20. 浏览器缓存机制,强缓存(Cache-Control)与协商缓存(ETag)如何配合?

A 协商缓存命中时服务器返回 304,浏览器使用本地缓存,不重复传输响应体 ✓ 正确答案
B 强缓存命中时浏览器仍会向服务器发送请求进行验证
C no-cache 表示完全不缓存,浏览器总是重新下载
D 强缓存请求与协商缓存请求都会向服务器发送完整请求