http-server
http-server copied to clipboard
Return `Last-Modified` header in response for compatibility with Live.js
I can contribute a PR here if desired. Just want to document the bug first.
Description:
babashka.http-server
is used with Live.js to hot-reload changes to HTML, CSS, and JS. It uses HEAD
requests to check the following headers: Etag
, Last-Modified
, Content-Length
, and Content-Type
.
Problem:
babashka.http-server
doesn't return Last-Modified
headers in the HTTP response. This means Live.js will fall back to using Content-Length
to determine if there are new changes. It's possible for this to cause missed reloads since some changes (such as changing an integer in CSS) will result in the same Content-Length
even though the content has changed.
When I use python3 -m http.server
to serve the same files, I don't miss any changes even if the output file length is the same.
Solution:
Use ring.middleware.not-modified
or something similar to add the Last-Modified
to the HTTP responses.
Actually I realize now that ring.middleware.not-modified
doesn't actually add the header itself. That's handled elsewhere such as in ring.util.response/file-response
.
I'd be fine with adding that. Perhaps we could even use the middleware directly in this project? PR welcome, if you get to it earlier than I do.