o bind a socket
o manage incoming connections
o parse http headers
o 'routing' - demultiplex handlers based on URL
o encode response
unless its a little embedded thing one usually uses some kind of select/epoll machinery to multiplex the work on each channel. I guess thread-per-request is another model that works at moderate connection counts.it helps to have some decent way of representing the header to send to the handler, C doesn't really have a great story here
I think the only funky thing is dealing with all the various body modes. so you will need to make some kind of protocol to deal with handlers and incremental updates if that's a thing for your use case.
I would just do the normal thing, read the rfc and spit out a couple hundred lines that talks to your browser...and then decide where if anywhere you need to go from there
I'm specifically interested in compressing my analytics stack. I'm currently interacting with HTTP Messages at a higher level. The problem, as I see it, is the webserver is already doing this work but without useful output. I'd like to implement my analytics paradigm natively at the webserver level.
Sounds like something nginx might handle via lua scripting?
Otherwise, maybe you want: https://github.com/lammertb/libhttp
Or you might want to look at either of:
https://www.acme.com/software/thttpd/
https://github.com/openbsd/src/tree/master/usr.sbin/httpd
If you really want to build (another) web server in C.
Not entirely clear why want to use C for this, though?
but I have to agree about C. unless the whole point is to ingrate with some existing codebase, there are several language choices which should turn this from a day or two of work to an hour or two - with a more robust outcome
There are certainly off the shelf options, but I enjoy reinventing the wheel and dislike dependencies. I'd like to use C because I have interest in OS level webservers.
https://github.com/nanovms/nanos/blob/master/src/http/http.c
Otoh, if low level is what you want, maybe look at:
and/or the library it is built on.
On the other hand, if you just want to log headers to a file, caddy can do that in a few lines:
https://caddyserver.com/docs/caddyfile/directives/log
AFAIK it can't log request bodies out of the box (like the content of a POST).
nginx, apache, etc, all allow writing modules that can be invoked at various parts of the HTTP-communication.
Also, I rather own the majority of my stack even though its slower, harder, and more problematic.