import gzip, os, functools from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler class GZ(SimpleHTTPRequestHandler): def do_GET(self): path = self.translate_path(self.path) if os.path.isdir(path): path = os.path.join(path, 'index.html') compressible = os.path.isfile(path) and not path.endswith(('.woff2', '.png', '.jpg', '.webp', '.ico', '.svg')) if compressible: with open(path, 'rb') as f: body = f.read() gz = gzip.compress(body, 6) self.send_response(200) self.send_header('Content-Type', self.guess_type(path)) self.send_header('Content-Encoding', 'gzip') self.send_header('Content-Length', str(len(gz))) self.end_headers() self.wfile.write(gz) else: super().do_GET() # 用法:gz-server.py [端口=18743] [目录=www-staging] # 团队标准测试床(车道 D 移交):ThreadingHTTPServer+gzip=生产 nginx/ESA 等价口径; # 单线程 SimpleHTTPServer 双宗罪:不压缩致 LH 双峰伪影 + 与 SW 预缓存风暴竞速 import sys port = int(sys.argv[1]) if len(sys.argv) > 1 else 18743 root = sys.argv[2] if len(sys.argv) > 2 else os.path.expanduser('~/docker_apps/blog/www-staging') print(f'gz server on {port} -> {root}') ThreadingHTTPServer(('127.0.0.1', port), functools.partial(GZ, directory=root)).serve_forever()