python内置http.server模块可快速搭建简易web服务器:命令行执行python -m http.server 8000即可提供静态文件服务;自定义basehttprequesthandler类可处理get/post、实现路由与动态响应,但仅适用于本地测试,不适用于生产环境。

用 Python 写一个简单 Web 服务器,最直接的方式是使用内置的 http.server 模块,无需安装额外依赖,适合快速测试、本地开发或教学演示。
用命令行快速启动静态服务器
在终端进入你存放 HTML、CSS、JS 等文件的目录,执行:
python -m http.server 8000
默认监听 http://localhost:8000,支持 GET 请求,自动列出当前目录下的文件(如果含 index.html 则优先显示)。端口号可换成任意可用数字(如 3000、5000)。
立即学习“Python免费学习笔记(深入)”;
自定义基础 HTTP 处理器
若需控制响应内容(比如返回固定文本或简单 JSON),可继承 http.server.BaseHTTPRequestHandler:
from http.server import HTTPServer, BaseHTTPRequestHandler<br><br>class SimpleHandler(BaseHTTPRequestHandler):<br> def do_GET(self):<br> self.send_response(200)<br> self.send_header('Content-type', 'text/plain; charset=utf-8')<br> self.end_headers()<br> self.wfile.write(b'Hello from Python web server!')<br><br>if __name__ == '__main__':<br> server = HTTPServer(('localhost', 8000), SimpleHandler)<br> print("Server running on http://localhost:8000")<br> server.serve_forever()
关键点:
• do_GET 处理 GET 请求,也可实现 do_POST
• 必须显式调用 send_response 和 end_headers
• 响应体要写入 self.wfile,且必须是 bytes 类型(加 b'' 或用 .encode())
支持简单路由和动态内容
可在 do_GET 中根据 self.path 做路径分发:
def do_GET(self):<br> if self.path == '/':<br> self.send_response(200)<br> self.send_header('Content-type', 'text/html')<br> self.end_headers()<br> self.wfile.write(b'<h1>Home Page</h1>')<br> elif self.path == '/api/time':<br> import json, datetime<br> self.send_response(200)<br> self.send_header('Content-type', 'application/json')<br> self.end_headers()<br> data = {'time': datetime.datetime.now().isoformat()}<br> self.wfile.write(json.dumps(data).encode())<br> else:<br> self.send_error(404, 'Not Found')
注意:
• 路径含查询参数(如 /search?q=python)时,self.path 包含完整字符串,可用 urllib.parse.urlparse 解析
• 不处理 POST 数据时,记得忽略或返回 405 错误
小提醒:这不是生产环境方案
http.server 是单线程、阻塞式实现,不支持并发请求,也没有 HTTPS、静态文件缓存、URL 重写等能力。实际项目推荐:
• Flask(轻量,适合 API 或小网站)
• FastAPI(高性能,自带 OpenAPI)
• Django(全功能框架,适合中大型应用)










