You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.11:SimpleHTTPRequestHandler无法设置extensions_map及YAML内容类型异常

解决Python 3.11中SimpleHTTPRequestHandler无法设置YAML内容类型的问题

问题场景

尝试用Python Web服务器作为Helm Chart仓库,需要将YAML文件的Content-Type设置为text/yaml或text/x-yaml,但在Python 3.11环境下,直接修改SimpleHTTPRequestHandler的extensions_map不生效,点击网站中的YAML文件时,服务器不会展示文件内容,而是弹出下载选项。

问题原因

Python 3.11中,SimpleHTTPRequestHandler的extensions_map类属性从mimetypes模块动态加载,直接覆盖类属性或实例属性的方式不会被请求处理逻辑采用,导致自定义的内容类型映射无效。

修复方案

通过重写guess_type方法,自定义YAML文件的内容类型映射,确保服务器返回正确的Content-Type头部。

修复后的代码

import http.server
import socketserver

PORT = 8000
DIRECTORY = "web"

class Handler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=DIRECTORY, **kwargs)
    
    def guess_type(self, path):
        # 先调用父类默认逻辑获取类型
        mime_type, encoding = super().guess_type(path)
        # 针对YAML文件替换内容类型
        if path.endswith('.yaml') or path.endswith('.yml'):
            return 'text/x-yaml', encoding
        return mime_type, encoding

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print(f"serving at port {PORT}")
    httpd.serve_forever()

说明

  • 重写guess_type方法后,既保留了父类对其他文件类型的默认处理逻辑,又针对性地为YAML文件设置了正确的Content-Type。
  • 同时支持.yaml和.yml两种后缀,适配Helm仓库的常见文件格式。

内容的提问来源于stack exchange,提问作者wffger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:16:14