簡易HTTPサーバ http.server
ローカルにあるHTMLファイルにブラウザからアクセスするための簡易的なHTTPサーバは、Pythonがあれば以下のコマンドで起動できます。
$ python -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
このコマンドを実行し、同じPCのブラウザで http://localhost:8080/ にアクセスすれば、カレントディレクトリにある index.html が表示されます。
困ったこと
ブラウザにキャッシュが効いてリロードしてもブラウザが簡易HTTPサーバにリクエストしてくれないときがあり、ローカルファイルを編集してもブラウザで確認できなくて困るケースがありました。ブラウザからキャッシュを消せばいいのですが、手間です。
そこで、簡易HTTPサーバからのレスポンスにキャッシュの有効期限0を含めるようにしました。
キャッシュ無効のPythonスクリプト
import http.server
import sys
port = int(sys.argv[1])
class NoCacheHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
def end_headers(self):
self.send_header('Cache-Control', 'max-age=0')
self.send_header('Expires', '0')
super().end_headers()
httpServer = http.server.HTTPServer(('', port), NoCacheHTTPRequestHandler)
httpServer.serve_forever()
server.py
などの名前でこのスクリプトを保存すると、以下のコマンドでサーバが起動します。
$ python server.py 8080
レスポンスヘッダはcurlコマンドでも確認できます。別のターミナルを開いて実行します。
$ curl -I http://localhost:8080/
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.8.3
Date: Thu, 12 Nov 2020 13:31:44 GMT
Content-type: text/html
Content-Length: 1178
Last-Modified: Thu, 12 Nov 2020 13:21:38 GMT
Cache-Control: max-age=0
Expires: 0
ブラウザでも毎回リクエストを送信してくれるようになり、ローカルファイルの変更がすぐに反映されるようになりました。
バージョン情報
$ python --version
Python 3.8.3