blob: ec676650acb09e428fdc78576e6f0aa29a825da2 [file] [log] [blame]
Jeff Gilbertecdb40d2019-02-14 15:40:15 -08001#! /usr/bin/env python3
2
3# Invoke http.server to host a basic webserver on localhost /without/ caching.
4# Files served by http.server are usually cached by browsers, which makes testing and debugging
5# buggy.
6
7import http.server
8import os
9
10from functools import partial
11
12
13class NoCacheRequestHandler(http.server.SimpleHTTPRequestHandler):
14 def end_headers(self):
15 self.send_header("Cache-Control", "no-cache, no-store, must-revalidate")
16 self.send_header("Pragma", "no-cache")
17 self.send_header("Expires", "0")
18 super().end_headers()
19
20
21if __name__ == '__main__':
22 import argparse
23
24 parser = argparse.ArgumentParser()
25 parser.add_argument('--bind', '-b', default='localhost', metavar='ADDRESS',
26 help='Specify alternate bind address '
Dean Jackson57cf95a2019-12-06 05:33:00 +110027 '[default: localhost - pass \'\' if you want to serve remote clients]')
Jeff Gilbertecdb40d2019-02-14 15:40:15 -080028 parser.add_argument('--directory', '-d', default=os.getcwd(),
29 help='Specify alternative directory '
30 '[default:current directory]')
31 parser.add_argument('port', action='store',
32 default=8000, type=int,
33 nargs='?',
34 help='Specify alternate port [default: 8000]')
35 args = parser.parse_args()
36
37 handler_class = partial(NoCacheRequestHandler, directory=args.directory)
Jeff Gilbert04f9d7f2020-11-13 16:51:34 -080038
39 server = http.server.ThreadingHTTPServer((args.bind, args.port), handler_class)
40 print('Serving ThreadingHTTPServer for', args, '...')
41 server.serve_forever()