from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Thread from urllib.request import urlopen class Handler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-Type", "text/plain; charset=utf-8") self.send_header("X-Content-Type-Options", "nosniff") self.send_header("Content-Security-Policy", "default-src 'none'; frame-ancestors 'none'") self.end_headers() self.wfile.write(b"fixture") def log_message(self, *args): pass server = HTTPServer(("127.0.0.1", 0), Handler) thread = Thread(target=server.serve_forever, daemon=True) thread.start() try: with urlopen(f"http://127.0.0.1:{server.server_port}/", timeout=3) as response: assert response.read() == b"fixture" assert response.headers["X-Content-Type-Options"] == "nosniff" assert "frame-ancestors 'none'" in response.headers["Content-Security-Policy"] print("loopback response headers verified") finally: server.shutdown() server.server_close() thread.join(timeout=3)