无需继承类,为SimpleHTTPRequestHandler添加Content-Type头
解决方法
方案一:手动添加CSS的Content-Type映射到extensions_map
修改代码中处理extensions_map的部分,在原有基础上补充CSS的类型映射:
#!/usr/bin/env python from functools import partial from http.server import SimpleHTTPRequestHandler, test import os HTTP_DIR = os.getcwd() # 先给原有扩展映射添加UTF-8 charset ext_map = {k: v + ';charset=UTF-8' for k, v in SimpleHTTPRequestHandler.extensions_map.items()} # 手动加入CSS的Content-Type配置 ext_map['.css'] = 'text/css;charset=UTF-8' # 赋值回类属性 SimpleHTTPRequestHandler.extensions_map = ext_map test(HandlerClass=partial(SimpleHTTPRequestHandler, directory=HTTP_DIR), port=8000, bind='0.0.0.0')
方案二:让mimetypes模块正确识别CSS类型
如果不想手动维护扩展映射,可在代码开头注册CSS的MIME类型:
#!/usr/bin/env python from functools import partial from http.server import SimpleHTTPRequestHandler, test import os import mimetypes # 强制注册CSS的MIME类型 mimetypes.add_type('text/css', '.css') HTTP_DIR = os.getcwd() SimpleHTTPRequestHandler.extensions_map = {k: v + ';charset=UTF-8' for k, v in SimpleHTTPRequestHandler.extensions_map.items()} test(HandlerClass=partial(SimpleHTTPRequestHandler, directory=HTTP_DIR), port=8000, bind='0.0.0.0')
原因分析
SimpleHTTPRequestHandler的extensions_map默认只包含压缩格式的映射(就是你打印出的那几个条目),绝大多数文件类型的Content-Type是通过mimetypes.guess_type()方法自动获取的。你遇到的问题是CSS类型未被mimetypes正确识别,而JS类型刚好能被正常解析。
两种方案都不需要继承扩展类,属于轻量解决方式:
- 方案一直接把CSS映射加入
extensions_map,优先级高于mimetypes的自动识别 - 方案二强制让
mimetypes模块识别CSS的正确类型,适合需要支持更多未知类型的场景
内容的提问来源于stack exchange,提问作者JoSSte
相关产品推荐
相关产品推荐

