Disable cache in python http server
Co-authored-by: Érico Porto <ericoporto2008@gmail.com>main
parent
181d5d285a
commit
6607a3cfac
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue