소스 검색

Disable cache in python http server

Co-authored-by: Érico Porto <ericoporto2008@gmail.com>
Anonymous Maarten 1 년 전
부모
커밋
6607a3cfac
1개의 변경된 파일21개의 추가작업 그리고 13개의 파일을 삭제
  1. 21 13
      test/emscripten/server.py

+ 21 - 13
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):