tipidee
Software
skarnet.org

tipidee caveats and FAQ

Caveats

Host support in HTTP/1.0

A strict reading of the HTTP/1.0 specification says that the Request-Line is the only piece of client-provided data that can be used to identify a resource, and that extension headers can modify the interpretation and processing of that resource but not change what resource is served.

This goes directly against the use of the Host header to identify the host of a resource and that is used in HTTP/1.1.

A lot of HTTP servers out there don't care about a strict reading of HTTP/1.0 (or even a strict reading of anything, really), and have historically used Host to perform virtual hosting even in HTTP/1.0, even though it goes against the specification. Consequently, clients have adapted, and even the popular curl client sends a Host header in HTTP/1.0.

Since the point of the Web is interoperability, tipidee aligns with the common practice, and will read a client-provided Host header, if any, to determine what domain the request is directed to, even in HTTP/1.0 no matter what the spec says. I refer to this practice as "speaking HTTP/1.05".

Frequently asked questions

I want my web server to listen to more than one address. Do I need to do all that for every address I have?

Not necessarily: you could listen to 0.0.0.0 for IPv4, and :: for IPv6. But if you don't want your server to listen to all the addresses on your machine, then yes, you will have to run one process per address:port tuple.

It's okay though: every listening process is very small. The skarnet.org server has two network cards and runs a web server on both of them, on IPv4 and IPv6, over HTTP and HTTPS, which makes 8 services. Plus one s6-log logger process for each of these services. Plus a supervisor for every service and every logger — for a whopping total of 32 long-running processes just for its web server functionality; and it's still not even noticeable, the amount of resources it consumes is negligible. So, don't worry about it; all your resources are still available for the serving itself.

Note that this allows you to run different instances of tipideed, on different sockets, with different configurations, if you need it. Use the -f option to specify a different config file in your instances.