# 1. HTTP 范围请求 Range/Accept-Ranges/Content-Range 与 206、416 状态码的语义如何在断点续传与视频切片中落地? A 服务端以 206 返回指定字节区间,并用 Content-Range 描述区间与总长,非法范围返回 416 ✓ 正确答案 B Range 请求失败重传时客户端应从文件头部重新下载 C 服务端收到非法范围请求时应返回 200 并附带完整资源 D Accept-Ranges 由客户端在请求头中声明以启用范围请求
# 2. HTTP 303 See Other 与 302 Found 在浏览器 POST-Redirect-GET 模式上的差异,为什么支付回调强制使用 303? A 303 与 302 在 POST 重定向上行为完全一致 B 浏览器收到 303 后会用 GET 访问新地址且不携带原请求体 ✓ 正确答案 C PRG 模式下刷新结果页会导致订单重复提交 D 302 的语义是强制把 POST 改写为 GET
# 3. HTTP 内容协商如何用 Accept、Accept-Encoding、Accept-Language 及质量因子 q 选择表示?无匹配时为何返回 406? A q=0 表示该表示优先级最低但仍可被选择 B 内容协商完全由服务端单方面决定,客户端无法参与 C Accept 头只用于声明压缩算法偏好 D 客户端偏好与服务器表示无交集时,服务端返回 406 Not Acceptable ✓ 正确答案
# 4. Cache-Control 中 no-cache、no-store、private、s-maxage 的实际语义是什么? A no-store 禁止所有缓存存储响应副本,适用于敏感信息 ✓ 正确答案 B s-maxage 对浏览器私有缓存生效并覆盖 max-age C no-cache 表示响应不允许被任何缓存存储 D private 表示响应可以被 CDN 等共享缓存缓存
# 5. Vary: Accept-Encoding 与 Vary: Accept-Language 对 CDN 缓存命中率的影响,缓存键设计时应避免哪些过度膨胀? A Vary 头的作用是让所有请求共享同一缓存条目 B Vary: Accept-Encoding 不会拆分 gzip 与 br 变体 C 将高基数请求头(如 User-Agent)纳入 Vary 会导致缓存键膨胀、命中率下降 ✓ 正确答案 D 缓存键只由 URL 组成,与请求头无关
# 6. Cookie 的 Path、Domain、SameSite、Secure、HttpOnly、__Host- 前缀组合如何防御 CSRF/XSS/会话固定攻击? A HttpOnly 属性用于阻止 Cookie 在跨站请求中被携带 B __Host- 前缀要求 Cookie 必须带 Secure、Path=/ 且无 Domain ✓ 正确答案 C SameSite=Lax 允许跨站 POST 表单携带 Cookie D Secure 属性允许 Cookie 在 HTTP 与 HTTPS 下均传输
# 7. If-Modified-Since 只精确到秒且属弱校验,经过多级代理时为何精度与一致性会下降?与 ETag 相比有何局限? A Last-Modified 可以精确区分同一秒内的多次内容修改 B 多级代理下时钟不同步会导致基于时间的校验一致性下降 ✓ 正确答案 C 强 ETag 依赖服务器时钟生成,跨代理时会不一致 D If-Modified-Since 属于强校验器,能反映字节级变化
# 8. Vary 头部如何依据内容协商的请求头划分缓存变体?过多 Vary 字段为何会拉低缓存命中率? A Vary 字段越多,缓存变体越少,命中率越高 B 缓存命中只要求 URL 相同,不校验 Vary 声明的请求头 C Vary 只对 URL 生效,与请求头取值无关 D 多个 Vary 字段会使缓存变体按取值组合成笛卡尔积膨胀,拉低命中率 ✓ 正确答案
# 9. 代理返回陈旧内容时,如何检查 Age、Vary、Date、缓存键与 stale-while-revalidate? A Vary 与缓存键是否匹配不影响命中结果的正确性 B Age 头表示响应已存在于缓存系统中的时间,可用于判断新鲜度 ✓ 正确答案 C stale-while-revalidate 会阻塞用户请求直到回源完成 D Date 头表示代理转发响应的时间
# 10. HEAD 与 GET 在性能测试中的等价性,搜索引擎优化为何仍存在差异?304 Not Modified 与 200 OK 的带宽差异如何度量? A 304 Not Modified 不携带响应实体,传输字节数远小于 200 全量响应 ✓ 正确答案 B HEAD 响应包含完整响应体,只是不带状态码 C HEAD 与 GET 在所有服务器上表现完全一致,可互换压测 D 304 响应比 200 响应消耗更多带宽
# 11. HTTP multipart/form-data 与 application/x-www-form-urlencoded 在大文件与二进制上传场景下的工程取舍? A application/x-www-form-urlencoded 适合直接传输二进制大文件 B multipart/form-data 以 boundary 分隔 part,可直接承载文件原始字节流 ✓ 正确答案 C multipart/form-data 无法在一个请求中同时携带文件与普通字段 D 两种编码类型都要求对二进制内容做百分号转义
# 12. HTTP/2 的流、帧、连接级流控如何配合,多路复用为何仍可能受 TCP 队头阻塞? A HTTP/2 多路复用可以完全消除 TCP 层的队头阻塞 B 流控窗口由发送方单方面设定,接收方无需干预 C HTTP/2 每条流使用独立 TCP 连接传输 D HTTP/2 一条连接承载多条流,帧通过流 ID 归属到具体流,但 TCP 丢包仍会造成跨流队头阻塞 ✓ 正确答案
# 13. HTTP/2 server push 为何在 Chrome 中默认关闭,103 Early Hints 与 preload link 关系如何? A preload 只能通过 HTML 标记声明,无法出现在响应头中 B 103 Early Hints 会携带完整响应体提前发给浏览器 C server push 在 Chrome 中默认关闭,主因之一是推送无法感知浏览器缓存状态导致浪费 ✓ 正确答案 D server push 推送的资源永远不会与浏览器缓存冲突
# 14. TLS 1.3 与 ALPN 协商在 HTTP/2、HTTP/3 部署中的 h2、h2c、h3 标识差异,未加密 HTTP/2 适用场景是什么? A h2c 表示基于明文 TCP 的 HTTP/2,浏览器原生支持 B h3 表示 HTTP/2 over TLS 的另一种写法 C ALPN 是 TLS 扩展,在握手期间协商应用层协议,h2 表示 HTTP/2 over TLS ✓ 正确答案 D 明文连接同样可以借助 ALPN 协商出 h2
# 15. HTTP/2 帧级流量控制(window update)的初始窗口、MAX_FRAME_SIZE 与单向流控策略对响应延迟的影响? A 初始窗口过小会导致频繁等待 WINDOW_UPDATE 停顿,抬高响应延迟 ✓ 正确答案 B HTTP/2 流控窗口只由发送方自行决定,无需协商 C MAX_FRAME_SIZE 表示连接上允许同时打开的帧总数 D 流控窗口对 DATA 帧无效,只作用于头部帧
# 16. HTTP/2 升级 HTTPS 与 HTTP/2 明文(h2c)的部署场景差异,Spring/Netty 服务器如何协商? A 浏览器支持通过明文 Upgrade 头协商并使用 h2c B h2 通过 TLS 握手中的 ALPN 协商,h2c 基于明文,仅适合受信内网或调试场景 ✓ 正确答案 C h2c 与 h2 在安全性上等价,可任意互换部署 D Netty 无法操作 HTTP/2 帧层,只能使用 HTTP/1.1
# 17. 浏览器缓存分区(cache partition)启用后跨站缓存命中率显著下降,灰度回滚与 A/B 评估方案如何设计? A 缓存分区只影响第一方资源,不影响第三方脚本 B 缓存分区可以通过配置关闭以恢复共享缓存命中率 C 缓存分区按顶层站点与请求方站点双重维度隔离缓存,导致跨站共享缓存命中率下降 ✓ 正确答案 D 缓存分区提升跨站缓存命中率
# 18. 安全方法与幂等方法如何区分,PUT、PATCH、POST 在重试策略上应如何处理? A POST 是幂等方法,网络超时后可直接自动重试 B PATCH 无论补丁内容如何都必然幂等 C 安全方法与幂等方法含义完全相同 D PUT 语义为整体替换,重复执行效果一致,属幂等方法 ✓ 正确答案
# 19. HPACK 动态表如何压缩重复首部,敏感字段为何应使用 never-indexed 表示? A HPACK 动态表只保存首部名,不保存首部值 B Authorization 参与动态表索引能显著提升压缩率,应默认启用 C never-indexed 表示敏感首部以字面量形式传输、不进入动态表,避免值被索引观察 ✓ 正确答案 D HPACK 索引表大小由客户端自行决定,无需协商
# 20. 遇到 421、425、429、503 时,客户端应分别依据哪些语义决定重连、延迟或重试? A 429 表示服务端要求客户端换连接重发请求 B 503 属于永久性错误,客户端不应重试 C 421 表示连接归属错误,客户端应新建或改用正确连接重发 ✓ 正确答案 D 425 表示请求被永久拒绝,禁止重试
# 21. HPACK 动态表压缩爆破攻击(HPACK bomb)与 Nginx、Envoy 的最大表大小限制策略? A HPACK bomb 通过压缩放大让接收方解码时消耗远超线网字节的内存 ✓ 正确答案 B 动态表大小上限由接收方解码时临时决定,无法协商 C 限制头部块大小与首部条数无法防御 HPACK bomb D HPACK bomb 只影响发送方,不消耗接收方内存
# 22. 强 ETag、弱 ETag、Last-Modified 如何用于条件请求,If-Match 与 If-None-Match 分别防止什么问题? A 弱 ETag 以 W/ 前缀标识,只保证语义等价,不能用于 If-Range 强校验 ✓ 正确答案 B If-Match 在 ETag 不匹配时返回 200,用于通知客户端继续写入 C If-None-Match 匹配时返回 412 Precondition Failed D Last-Modified 是强验证器,可精确到毫秒
# 23. Transfer-Encoding: chunked 与 Content-Length 为何互斥?两者同时出现时请求走私(request smuggling)如何发生? A 前后端对消息体长度的解析不一致是请求走私的根本成因 ✓ 正确答案 B Content-Length 与 Transfer-Encoding: chunked 同时出现时以 Content-Length 为准 C chunked 编码的每个块以固定 8 字节长度前缀开始 D 请求走私只影响请求性能,不构成安全风险
# 24. Expect: 100-continue 让客户端在发送请求体前先等服务器确认,它在大文件上传中如何节省带宽?服务器不响应 100 时客户端如何处理? A 服务器可对带 Expect: 100-continue 的请求直接返回 4xx,此时客户端无需再发送请求体 ✓ 正确答案 B 客户端必须无限期等待 100 Continue 才能发送请求体 C 100-continue 会额外消耗一倍的上传带宽 D 服务器收到 100-continue 后必须先发送请求体再返回 100
# 25. stale-if-error、stale-while-revalidate 与 must-understand 在源站故障时如何影响 CDN 体验,配置不当的副作用是什么? A stale-if-error 允许源站报错时用过期副本兜底,但会吸收故障告警、可能掩盖真实问题 ✓ 正确答案 B stale-while-revalidate 会阻塞用户请求直到回源刷新完成 C must-understand 要求缓存执行所有指令,未知指令一律视为可缓存 D stale-if-error 在源站返回"错误但 200"的降级响应时也会触发兜底
# 26. CORS 预检(OPTIONS)为何不能被简单请求绕过,Access-Control-Request-Headers 与 Access-Control-Request-Method 如何协商? A 预检失败时浏览器仍会发送实际跨域请求,只是响应被拦截 B 预检通过 OPTIONS 携带 Access-Control-Request-Method 与 Access-Control-Request-Headers,服务端授权后才允许实际请求发出 ✓ 正确答案 C 简单请求不需要预检,因此服务器可以完全忽略其鉴权 D Access-Control-Max-Age 用于禁止浏览器缓存预检结果
# 27. CORS 预检由哪些请求条件触发,简单请求并不意味着服务器可以忽略鉴权的原因是什么? A 携带自定义头 Authorization 的 GET 请求属于简单请求,无需预检 B Content-Type 为 application/json 的 POST 会触发 CORS 预检 ✓ 正确答案 C 简单请求不会被服务端处理,因此无需鉴权 D 预检请求由服务器主动发起
# 28. 浏览器跨源隔离(cross-origin isolation)开启 COOP/COEP 后 SharedArrayBuffer 与高精度计时器的可用性影响? A 开启跨源隔离后 SharedArrayBuffer 仍然不可用 B 跨源隔离只需设置 COOP 一个响应头即可生效 C 跨源隔离会进一步降低 performance.now 的精度 D COEP: require-corp 要求所有跨源子资源显式携带 CORS/CORP 头才能加载 ✓ 正确答案
# 29. 浏览器同源策略下 cookie 的 Lax+POST 行为在跨站表单提交与 top-level GET 导航上的差异? A SameSite=Lax 的 Cookie 在跨站 POST 表单提交中也会携带 B Chrome 的 Lax+POST 规则允许 Cookie 设置后短时间内跨站 top-level POST 携带,窗口过后恢复标准 Lax 行为 ✓ 正确答案 C SameSite=Strict 与 Lax 在跨站 GET 导航上的行为完全相同 D SameSite=Lax 无法阻断任何形式的跨站请求携带 Cookie
# 30. HTTP/1.1 持久连接(Connection: keep-alive)与 Pipelining 为何被浏览器和服务端弃用,应用层队头阻塞、代理兼容性差与同域并发连接数限制(如 Chrome 的 6 个)之间如何关联? A HTTP/1.1 同域 6 连接限制是"多连接弥补串行"的折中,连接内请求仍然串行 ✓ 正确答案 B Pipelining 允许乱序返回响应,因此没有队头阻塞问题 C 持久连接在 HTTP/1.1 中已被完全废弃 D Pipelining 被弃用的原因是握手开销过大