Python面试题更新 2026-08-05

如果要求你用 Python 编写一个支持基本 GET 和 POST 请求的简易 HTTP 服务器,你会如何实现?请给出核心代码和关键处理逻辑。

编码实现技术原理Python

考察说明

考查对 HTTP 协议基础、Python socket 编程及并发处理的理解与动手实现能力。

回答思路

  1. 【回答框架 1】使用 Python 内置的 http.server 模块中的 HTTPServer 和 BaseHTTPRequestHandler 是最直接的实现方式。HTTPServer 负责监听端口和接受连接,BaseHTTPRequestHandler 处理具体请求,通过重写 do_GET 和 do_POST 方法来响应请求。
  2. 【回答框架 2】在 do_GET 中,通过 self.path 获取请求路径,self.headers 获取请求头,使用 self.send_response(200)、self.send_header 设置响应头、self.end_headers() 结束头,然后使用 self.wfile.write 写入响应体。
  3. 【回答框架 3】对于 do_POST,需要先通过 self.headers.get('Content-Length') 获取请求体长度,再使用 self.rfile.read 读取指定字节的请求体。解析请求体后,返回处理结果。
  4. 【回答框架 4】如需支持并发,可以使用 ThreadingHTTPServer 替代 HTTPServer,它基于 ThreadingMixIn 自动为每个连接创建新线程,提高并发处理能力。
  5. 【回答框架 5】需要考虑的边界情况包括:错误路径处理(404)、请求方法不支持(返回 405)、读取请求体时长度不足或过大、连接中断等异常处理。
  6. 【关键点 1】核心类是 HTTPServer 和 BaseHTTPRequestHandler,重写 do_GET 和 do_POST。
  7. 【关键点 2】使用 ThreadingHTTPServer 可简单实现并发。
  8. 【关键点 3】读取 POST 请求体需注意 Content-Length 头。
  9. 【关键点 4】设置正确的 Content-Type 响应头。
  10. 【关键点 5】通过 try-except 处理连接异常。
  11. 【易错点 1】并发量较高时,每个请求一个线程会耗尽资源,需考虑线程池或异步方案。
  12. 【易错点 2】读取 POST 数据时若未正确读取 Content-Length,可能造成阻塞或数据不完整。
  13. 【易错点 3】未处理客户端中断时,可能因发送数据引发 BrokenPipeError。