手写一个简单的 HTTP 服务器

本文将从 TCP socket 出发,用 Python 手把手实现一个最小可用的 HTTP 服务器。 什么是 socket? Socket(套接字)是操作系统提供给应用程序的网络通信接口,支持 TCP 和 UDP 协议。有了 socket,你只需要发送和接收数据,而无需关心底层网卡、路由等复杂细节。Python 也拥有操作 socket 的标准库,可以使用 socket 在 Python 中接收和发送数据。 客户端 Socket # 用 netcat 建立一个 TCP 服务器,只要连接上就会发送 Hello world! $ echo "Hello world!" | nc -lvnp 6767 import socket client_socket = socket.socket( socket.AF_INET, # 使用 IPv4 socket.SOCK_STREAM # 使用面向流的TCP协议 ) # 连接到 127.0.0.1:6767 client_socket.connect(('127.0.0.1', 6767)) # 一次性接收最大 1024 字节的数据 print(client_socket.recv(1024)) # b'Hello world!\r\n' 服务端 Socket import socket server_socket = socket.socket( socket.AF_INET, # 使用 IPv4 socket.SOCK_STREAM # 使用面向流的TCP协议 ) # 允许端口复用,避免重启时 "Address already in use" server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定到 127.0.0.1:6767,此时还没有开始监听 server_socket.bind(('127.0.0.1', 6767)) # 开始监听,括号里填一个整数可以指定最大同时连接数 server_socket.listen() print('服务器正在运行') while True: # 重复等待连接 conn, addr = server_socket.accept() print(f'{ addr } 已连接') conn.sendall(b'Hello world!') # 发送完整的数据 conn.close() $ nc 127.0.0.1 6767 Hello world! HTTP 协议(摘自 MDN) HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方——通常是 Web 浏览器——发起的。完整网页文档通常由文本、布局描述、图片、视频、脚本等资源构成。 ...

2026/08/05 · 4 min · 708 words · zzy2357