
使用 http.server.SimpleHTTPRequestHandler 自定义 HTTP 服务器时,若未调用 self.end_headers(),响应头将不会被发送到客户端,导致浏览器无法识别 Content-Type,从而将 HTML 当作纯文本显示。
使用 `http.server.simplehttprequesthandler` 自定义 http 服务器时,若未调用 `self.end_headers()`,响应头将不会被发送到客户端,导致浏览器无法识别 `content-type`,从而将 html 当作纯文本显示。
在 Python 的 http.server 模块中,SimpleHTTPRequestHandler 提供了底层 HTTP 协议处理能力,但其响应流程需严格遵循 HTTP 规范:响应状态行 → 响应头 → 空行(CRLF)→ 响应体。其中,self.end_headers() 的作用正是写入终止响应头的空行(\r\n),并刷新缓冲区——这是浏览器解析响应头的关键分界点。
在原始代码中,虽然调用了 self.send_header() 设置了 Content-Type 和 Content-Length,但缺少 self.end_headers(),导致响应头未真正发出。浏览器收不到任何响应头(包括 Content-Type),只能依据默认行为(如 MIME 类型嗅探或 fallback 到 text/plain)处理响应体,因此 HTML 被显示为源码而非渲染结果。
此外,还有两个易忽略的关键点:
-
Content-Length的值必须是字符串类型(str(len(...))),而非整数,否则会触发TypeError; -
self.wfile.write()前必须确保响应头已结束,否则数据可能被截断或解析错乱。
✅ 正确实现如下:
self.end_headers()
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











