#!/usr/bin/env python3 """ 跟 `python3 -m http.server` 一样零依赖,只多发两个头: Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Embedder-Policy: require-corp。 @mujoco/mujoco 这个 WASM 包是多线程(pthread)构建,启动时要用 SharedArrayBuffer, 而浏览器只在"跨源隔离"(cross-origin isolated)页面里才允许用 SharedArrayBuffer。 不发这两个头的话,WASM 会卡在 wasm-instantiate 那一步一直转,既不报错也不失败, 表现就是"初始化 MuJoCo…"卡死不动——console 里唯一线索是反复打印 "still waiting on run dependencies: dependency: wasm-instantiate"。 jsDelivr 给这个包的资源都带 Cross-Origin-Resource-Policy: cross-origin, 所以跨源隔离页面照样能从 CDN 拉东西,不会被 COEP 卡住。 """ import http.server import sys class Handler(http.server.SimpleHTTPRequestHandler): def end_headers(self): self.send_header('Cross-Origin-Opener-Policy', 'same-origin') self.send_header('Cross-Origin-Embedder-Policy', 'require-corp') # 开发中的资源一律不缓存。ES 模块缓存得特别死:改完 src/*.js 普通刷新 # 照样跑旧代码,而且**不报错**,只在调用新方法时抛 # "xxx is not a function" —— 极难往缓存上想,已经浪费过一轮排查。 self.send_header('Cache-Control', 'no-store, must-revalidate') super().end_headers() if __name__ == '__main__': port = int(sys.argv[1]) if len(sys.argv) > 1 else 8000 http.server.test(HandlerClass=Handler, port=port)