上一篇
Python实现静态Web服务器完整教程 - 从零搭建HTTP服务
- Python
- 2025-08-11
- 1287
Python实现静态Web服务器完整指南
本文将详细介绍:
- HTTP协议基本原理
- 使用socket处理网络请求
- 解析HTTP请求报文
- 返回静态文件响应
- 处理404错误
- 完整可运行代码示例
一、HTTP服务器核心原理
静态Web服务器需要实现:
- 监听TCP端口(通常80/8080)
- 接收客户端HTTP请求
- 解析请求路径对应的静态文件
- 构造HTTP响应头和文件内容
- 发送响应给客户端
二、完整代码实现
创建server.py文件:
import socket import os SERVER_HOST = '0.0.0.0' SERVER_PORT = 8080 WEB_ROOT = 'static' # 静态文件目录 def handle_request(client_socket): # 接收客户端请求数据 request = client_socket.recv(1024).decode() # 解析请求路径 request_line = request.split('\n')[0] filename = request_line.split()[1][1:] or 'index.html' try: # 读取请求文件内容 with open(os.path.join(WEB_ROOT, filename), 'rb') as f: content = f.read() # 构造成功响应 response = f"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n".encode() response += content except FileNotFoundError: # 文件不存在返回404 response = "HTTP/1.1 404 Not Found\r\n\r\n404 File Not Found
".encode() # 发送响应并关闭连接 client_socket.sendall(response) client_socket.close() def run_server(): # 创建TCP socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((SERVER_HOST, SERVER_PORT)) server_socket.listen(5) print(f"服务器启动 http://{SERVER_HOST}:{SERVER_PORT}") while True: # 等待客户端连接 client_socket, addr = server_socket.accept() print(f"接收到来自 {addr} 的连接") handle_request(client_socket) if __name__ == "__main__": run_server()
三、使用说明
- 创建项目目录:
mkdir my_server && cd my_server mkdir static # 静态文件存放目录
- 在static目录放入测试文件(如index.html)
- 启动服务器:
python server.py
- 浏览器访问:http://localhost:8080
四、关键功能解析
1. HTTP请求解析
解析请求首行获取资源路径:
GET /index.html HTTP/1.1 → 提取路径: '/index.html'
2. 文件路径处理
防止路径遍历攻击:
# 安全处理示例 filename = filename.replace('../', '') # 过滤上级目录访问
3. 响应头构造
基础HTTP响应结构:
HTTP/1.1 200 OK Content-Type: text/html [空行] <html>...</html>
五、扩展功能建议
- 添加MIME类型支持(CSS/JS/图片等)
- 实现目录列表功能
- 添加访问日志记录
- 支持HTTP/1.1持久连接
- 增加简单的CGI支持
通过本教程,您已掌握Python实现静态Web服务器的核心方法。这个基础服务器每秒可处理数百个请求,是理解HTTP协议和网络编程的绝佳实践。
本文由YinTaoDai于2025-08-11发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257854.html
发表评论