上一篇
http服务器代码
- 行业动态
- 2025-04-28
- 4942
该HTTP服务器基于Python Flask框架构建,通过
app.route('/')
定义根路径路由,使用 @app.route
装饰器绑定视图函数,当接收到GET请求时返回”Hello World!”文本响应,默认监听本地50
基础HTTP服务器实现
使用Python内置模块http.server
可快速搭建简单HTTP服务器,默认处理GET请求并返回固定响应。
代码示例(Python)
from http.server import BaseHTTPRequestHandler, HTTPServer class SimpleHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) # 设置状态码 self.send_header("Content-type", "text/html") # 设置响应头 self.end_headers() self.wfile.write(b"<h1>Hello, HTTP!</h1>") # 发送响应体 def run_server(port=8080): server = HTTPServer(('', port), SimpleHandler) print(f"Server running on http://localhost:{port}") server.serve_forever() run_server()
处理不同HTTP方法
通过重写do_METHOD
方法(如do_POST
)支持其他HTTP方法,未实现的方法需返回405 Method Not Allowed
。
代码扩展示例
class MethodHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(b"Handled GET Request") def do_POST(self): content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length) self.send_response(200) self.end_headers() self.wfile.write(f"Received POST data: {post_data.decode()}".encode()) def do_PUT(self): self.send_response(405) # 方法未允许 self.end_headers()
自定义路由与响应
根据URL路径分发请求,返回动态内容。
代码示例
class RouteHandler(BaseHTTPRequestHandler): ROUTES = { "/": lambda: b"<h1>Home Page</h1>", "/about": lambda: b"<h1>About Page</h1>", "/data": lambda: json.dumps({"key": "value"}).encode() } def do_GET(self): handler = self.ROUTES.get(self.path, self.not_found) self.send_response(200) self.send_header("Content-type", "application/json" if self.path == "/data" else "text/html") self.end_headers() self.wfile.write(handler()) def not_found(self): self.send_response(404) self.end_headers() self.wfile.write(b"404 Not Found")
HTTP状态码与响应头对照表
状态码 | 含义 | 常见场景 |
---|---|---|
200 | OK | 正常请求成功 |
201 | Created | 资源创建成功(POST) |
400 | Bad Request | 客户端请求错误 |
403 | Forbidden | 权限不足 |
404 | Not Found | 资源不存在 |
405 | Method Not Allowed | 方法不被支持 |
500 | Internal Server Error | 服务器内部错误 |
常见问题与解答
问题1:如何支持HTTPS协议?
解答:需使用http.server.HTTPServer
的SSL版本HTTPServer
,配合证书文件。
import ssl context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(certfile="cert.pem", keyfile="key.pem") server = HTTPServer(('', 443), SimpleHandler) server.socket = context.wrap_socket(server.socket, server_side=True) server.serve_forever()
问题2:如何限制服务器仅允许本地访问?
解答:绑定localhost
或0.0.1
地址,并设置防火墙规则。
server = HTTPServer(('127.0.0.1', 808