From 6607a3cface756a1b89f0dc97a86d391c10033aa Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Mon, 14 Aug 2023 03:50:03 +0200 Subject: [PATCH] Disable cache in python http server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Érico Porto --- test/emscripten/server.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/test/emscripten/server.py b/test/emscripten/server.py index be751725d..7787e3b9e 100755 --- a/test/emscripten/server.py +++ b/test/emscripten/server.py @@ -3,13 +3,15 @@ # Based on http/server.py from Python from argparse import ArgumentParser +import contextlib from http.server import SimpleHTTPRequestHandler +from http.server import ThreadingHTTPServer +import socket from socketserver import TCPServer -def serve_forever(port: int, ServerClass): - handler = SimpleHTTPRequestHandler - handler.extensions_map = { +class MyHTTPRequestHandler(SimpleHTTPRequestHandler): + extensions_map = { ".manifest": "text/cache-manifest", ".html": "text/html", ".png": "image/png", @@ -21,14 +23,25 @@ def serve_forever(port: int, ServerClass): "": "application/octet-stream", } + def end_headers(self): + self.send_my_headers() + SimpleHTTPRequestHandler.end_headers(self) + + def send_my_headers(self): + self.send_header("Cache-Control", "no-cache, no-store, must-revalidate") + self.send_header("Pragma", "no-cache") + self.send_header("Expires", "0") + + +def serve_forever(port: int, ServerClass): + handler = MyHTTPRequestHandler + addr = ("0.0.0.0", port) HandlerClass = SimpleHTTPRequestHandler with ServerClass(addr, handler) as httpd: host, port = httpd.socket.getsockname()[:2] url_host = f"[{host}]" if ":" in host else host - print( - f"Serving HTTP on {host} port {port} (http://{url_host}:{port}/) ..." - ) + print(f"Serving HTTP on {host} port {port} (http://{url_host}:{port}/) ...") try: httpd.serve_forever() except KeyboardInterrupt: @@ -42,16 +55,11 @@ def main(): parser.add_argument("-d", dest="directory", type=str, default=None) args = parser.parse_args() - import contextlib - import http.server - import socket - - class DualStackServer(http.server.ThreadingHTTPServer): + class DualStackServer(ThreadingHTTPServer): def server_bind(self): # suppress exception when protocol is IPv4 with contextlib.suppress(Exception): - self.socket.setsockopt( - socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) + self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) return super().server_bind() def finish_request(self, request, client_address):