使用Python的http.server时能否禁用目录列表功能?
实现方式
可以实现该效果,分两种场景处理即可:
场景1:使用Python 3.11及以上版本
官方已经内置了禁止目录列表的启动参数,直接在运行命令中添加--directory-listing off即可:
python -m http.server --directory-listing off
配置后访问没有index.html的目录时,会直接返回403 Forbidden状态码,不会展示目录列表。
场景2:使用Python 3.10及更低版本
低版本没有内置开关,需要自定义请求Handler重写目录列表的生成逻辑,示例代码如下:
from http.server import HTTPServer, SimpleHTTPRequestHandler class NoDirListHandler(SimpleHTTPRequestHandler): def list_directory(self, path): # 禁止返回目录列表,返回403状态码 self.send_error(403, "Directory listing is forbidden") return None if __name__ == "__main__": # 可自行修改监听端口 listen_port = 8000 server = HTTPServer(("0.0.0.0", listen_port), NoDirListHandler) print(f"Serving at http://0.0.0.0:{listen_port}, directory listing disabled") server.serve_forever()
将代码保存为custom_server.py后,运行python custom_server.py即可生效。如果需要返回404状态码,只需要将send_error的第一个参数改为404,提示信息改为Page not found即可。
注意:Python自带的
http.server仅适合本地开发调试使用,没有做生产环境所需的安全、性能优化,不建议在生产环境直接使用。
内容的提问来源于stack exchange,提问作者user200783
相关产品推荐
相关产品推荐

