# 计算机基础
# 一、网络
⚡ 30 秒速记
- 分层记:应用层(
HTTP/DNS/WebSocket)→ 传输层(TCP/UDP)→ 网络层(IP)→ 链路层 TCP用握手、确认、重传换可靠有序,UDP全不管换低延迟;HTTP/3的QUIC在UDP上自己做了可靠传输- 前端最该抓三段:
DNS解析、建连成本(TCP+TLS握手往返)、缓存策略(强缓存 / 协商缓存) - 队头阻塞:
HTTP/1.1一个连接同时只跑一个请求 →HTTP/2多路复用解决应用层,但丢包时TCP层还会卡 →HTTP/3换QUIC解决 - 排查按层缩小:打不开先看
DNS和连通性,证书报错是TLS,有响应但内容不对才是应用层
前端学网络,最实用的是能把一次请求按层拆开:先 DNS 拿 IP,再 TCP 建连,HTTPS 还要 TLS 握手,最后才是 HTTP 请求和响应。 每一段都有成本,DNS 有缓存,握手要来回跑几趟,所以才有 preconnect、复用连接、收敛域名这些优化;资源能不能干脆不发请求,就看缓存策略。出问题时也按这个顺序查:解析不对、连不上、证书错、还是接口本身返回不对,先定位到层再动手,别一上来就怀疑业务代码。
💬 面试官追问
-
部分用户打不开活动页,服务端监控一切正常,你先怀疑什么?
先怀疑请求根本没到服务器。让用户
nslookup一下域名,看解析出来的IP对不对,再看是不是集中在某个运营商或地区。服务端正常只能证明到了的请求是好的,这时候回滚前端代码没用。 -
用户改
hosts指定IP后就能打开了,说明什么?说明服务器和页面本身是好的,问题在域名解析:可能是某个运营商
DNS缓存了旧记录,或者被劫持了。去不同网络下查解析结果,确认后修记录、等TTL过期,App里可以考虑上HTTPDNS。 -
海外落地页引了五个第三方域名,首屏慢,又不能删,怎么优化?
关键的一两个域名加
<link rel="preconnect" href="https://cdn.example.com" crossorigin>,提前把DNS、TCP、TLS做掉;次要的用dns-prefetch。别全加preconnect,建好的连接大约十秒没用上就会被关,白占资源。 -
HTTP/2都多路复用了,为什么还说有队头阻塞?HTTP/2解决的是应用层:一个连接里多个请求可以交错传。但底下还是一条TCP,丢一个包,后面所有流的数据都得等它重传完才能交给上层。HTTP/3把传输层换成QUIC,每个流独立,丢包只影响自己那个流。 -
静态资源设了长缓存,运营换了图用户却看不到,怎么兼顾?
资源文件名带内容
hash,max-age设一年再加immutable;入口HTML用no-cache每次协商。换图就是换了文件名,HTML一更新新地址就生效,旧缓存自然不再被引用。