Disable cache in python http server

Co-authored-by: Érico Porto <ericoporto2008@gmail.com>
This commit is contained in:
Anonymous Maarten 2023-08-14 03:50:03 +02:00
parent 181d5d285a
commit 6607a3cfac
1 changed files with 21 additions and 13 deletions

View File

@ -3,13 +3,15 @@
# Based on http/server.py from Python # Based on http/server.py from Python
from argparse import ArgumentParser from argparse import ArgumentParser
import contextlib
from http.server import SimpleHTTPRequestHandler from http.server import SimpleHTTPRequestHandler
from http.server import ThreadingHTTPServer
import socket
from socketserver import TCPServer from socketserver import TCPServer
def serve_forever(port: int, ServerClass): class MyHTTPRequestHandler(SimpleHTTPRequestHandler):
handler = SimpleHTTPRequestHandler extensions_map = {
handler.extensions_map = {
".manifest": "text/cache-manifest", ".manifest": "text/cache-manifest",
".html": "text/html", ".html": "text/html",
".png": "image/png", ".png": "image/png",
@ -21,14 +23,25 @@ def serve_forever(port: int, ServerClass):
"": "application/octet-stream", "": "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) addr = ("0.0.0.0", port)
HandlerClass = SimpleHTTPRequestHandler HandlerClass = SimpleHTTPRequestHandler
with ServerClass(addr, handler) as httpd: with ServerClass(addr, handler) as httpd:
host, port = httpd.socket.getsockname()[:2] host, port = httpd.socket.getsockname()[:2]
url_host = f"[{host}]" if ":" in host else host url_host = f"[{host}]" if ":" in host else host
print( print(f"Serving HTTP on {host} port {port} (http://{url_host}:{port}/) ...")
f"Serving HTTP on {host} port {port} (http://{url_host}:{port}/) ..."
)
try: try:
httpd.serve_forever() httpd.serve_forever()
except KeyboardInterrupt: except KeyboardInterrupt:
@ -42,16 +55,11 @@ def main():
parser.add_argument("-d", dest="directory", type=str, default=None) parser.add_argument("-d", dest="directory", type=str, default=None)
args = parser.parse_args() args = parser.parse_args()
import contextlib class DualStackServer(ThreadingHTTPServer):
import http.server
import socket
class DualStackServer(http.server.ThreadingHTTPServer):
def server_bind(self): def server_bind(self):
# suppress exception when protocol is IPv4 # suppress exception when protocol is IPv4
with contextlib.suppress(Exception): with contextlib.suppress(Exception):
self.socket.setsockopt( self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
return super().server_bind() return super().server_bind()
def finish_request(self, request, client_address): def finish_request(self, request, client_address):