blob: 514e6823fb0e31aef27b015d40f4c324bfb5cfd7 [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 '
27 '[default: all interfaces]')
28 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)
38 http.server.test(HandlerClass=handler_class, port=args.port, bind=args.bind)