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

如何为Python的http.server强制指定特定MIME类型?

解决http.server无扩展名文件自定义MIME类型的问题

要实现通过文件名映射字典设置Content-type,只需继承并重写http.server.SimpleHTTPRequestHandler的guess_type方法即可——这是http.server判断文件MIME类型的核心方法。

实现步骤

  1. 定义文件名-MIME类型映射字典,键为无扩展名文件名,值为对应MIME类型。
  2. 自定义请求处理器类,继承SimpleHTTPRequestHandler,重写guess_type方法:优先从字典匹配文件名,匹配成功返回对应MIME类型,否则沿用默认逻辑。
  3. 使用自定义处理器启动HTTP服务器。

完整代码示例

import http.server
import os

class CustomMIMEHandler(http.server.SimpleHTTPRequestHandler):
    # 按需修改文件名与MIME类型的映射关系
    FILE_TO_MIME = {
        "readme": "text/markdown",
        "avatar": "image/jpeg",
        "config": "application/json",
        "log": "text/plain"
    }

    def guess_type(self, path):
        # 提取请求路径中的纯文件名(去掉路径前缀)
        filename = os.path.basename(path)
        # 优先匹配自定义字典
        if filename in self.FILE_TO_MIME:
            return self.FILE_TO_MIME[filename]
        # 未匹配到则使用默认类型判断逻辑(也可直接返回"application/octet-stream")
        return super().guess_type(path)

if __name__ == "__main__":
    # 绑定本地8000端口,可自行修改
    server_addr = ("", 8000)
    httpd = http.server.HTTPServer(server_addr, CustomMIMEHandler)
    print(f"Server running at http://localhost:{server_addr[1]}")
    httpd.serve_forever()

补充说明

  • 若需忽略文件名大小写,可将判断逻辑改为filename.lower() in self.FILE_TO_MIME,同时将字典的键统一设为小写。
  • 若希望未匹配的文件固定返回application/octet-stream,替换return super().guess_type(path)为return "application/octet-stream"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:43:19