I think that every software developer should implement an HTTP server from nothing more than sockets as part of their learning journey. It's a great way to validate what you've learned, and gives you good experience with implementing usable software to a specification (in this case, RFC 2616).
I have fond memories of implementing one in C (complete with multithreading and request queuing) at university. I found it immensely satisfying, I felt like I was Tim Berners-Lee back in 1990!
That knowledge came in handy some years later when I worked building a TLS intercepting proxy (basically mitmproxy, but not) as part of an automated testing tool. That job really validated why I studied computer science; I had all the prerequisite understanding to jump straight into the task from day 1.