当前位置:首页 > Python > 正文

Python实现静态Web服务器完整教程 - 从零搭建HTTP服务

Python实现静态Web服务器完整指南

本文将详细介绍:

  • HTTP协议基本原理
  • 使用socket处理网络请求
  • 解析HTTP请求报文
  • 返回静态文件响应
  • 处理404错误
  • 完整可运行代码示例

一、HTTP服务器核心原理

静态Web服务器需要实现:

  1. 监听TCP端口(通常80/8080)
  2. 接收客户端HTTP请求
  3. 解析请求路径对应的静态文件
  4. 构造HTTP响应头和文件内容
  5. 发送响应给客户端

二、完整代码实现

创建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\n

404 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()

三、使用说明

  1. 创建项目目录:
    mkdir my_server && cd my_server
    mkdir static  # 静态文件存放目录
  2. 在static目录放入测试文件(如index.html)
  3. 启动服务器:
    python server.py
  4. 浏览器访问: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协议和网络编程的绝佳实践。

发表评论