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
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):