最基本的 Web 服务器就是:监听 TCP 端口,接受连接,读取 HTTP 请求报文,解析请求行(方法、路径、协议版本),返回符合 HTTP 协议的响应报文。用 Node.js 十几行即可实现:

const http = require('http')
http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('Hello World')
}).listen(8080)

更底层用 socket API(如 C 的 socket/bind/listen/accept)自己拼 HTTP 报文也能做到,这能加深对"HTTP 是 TCP 之上的文本协议"的理解。

演进路径:单进程单线程串行处理 → 每连接一进程/线程(fork/线程池,解决并发)→ I/O 多路复用(epoll/kqueue,单线程管万连接,Nginx/Node 路线)→ 多进程 master-worker 利用多核 → 功能层加静态文件服务、反向代理、负载均衡、缓存、TLS 终止 → 集群化 + 负载均衡器水平扩展。追问方向:I/O 多路复用原理(select/poll/epoll 差异)、长连接与 keep-alive 的实现、HTTP 解析中的粘包处理。这题考察的是从"能跑"到"扛得住"的架构思维。