URI redirect
When you visit kvarn.org, the web server doesn’t fetch the directory that is
the root of the files. It naturally searches for public/index.html. That’s
what most web servers do when a query points to a directory.
Kvarn takes this a step further (by default, you can of course disable this
behaviour, but why would you?). For one, it checks the path of the request URI
for a final /. Only then does it search for an index.html. This is due to
performance - we wouldn’t want to check the FS if the request is a directory or
a file. That takes time.
Additionally, it looks up .html if the path ends in .. kvarn.org/pipeline.
= kvarn.org/pipeline.html. If an empty filename doesn’t make sense, why should
a empty file extension?
This may cause trouble with social media. Just insert a
htmlat the end.
The .html and index.html aren’t hard-coded, but can be
changed.
This is handled using a
prime extension, which
internally redirects the request if it ends with . or /.
The method which handles this is
with_uri_redirect.
HTTP to HTTPS
By default, Kvarn tries to upgrade HTTP requests to HTTPS ones, by replying with
a 307 Temporary Redirect with a location of the same page, but with HTTPS.
This is also a prime extension, that redirects the request to a special prepare
extension which is only accessible to the internals. There, it responds with the
307 Temporary Redirect.
The extension above has a higher priority and is therefore ran before. Notice the /index.html below.
$ curl -i http://icelk.dev
HTTP/1.1 307 Temporary Redirect
location: https://icelk.dev/index.html
server: Kvarn/0.5.0 (Linux)
connection: keep-alive
...
That is a by-product of the URI redirection.