Home - maru/libmicrohttpd-http2 GitHub Wiki
MSoC (Maru's Summer of Code)
Inspired by GSoC, I'll spend 12 weeks adding HTTP/2 support to libmicrohttpd (MHD).
HTTP/2
HTTP/2 is the lastest version of the HTTP protocol. Its main feature is the use of a single connection between a client and a server. Major changes have been introduced in HTTP/2, such as frames, multiplexing, flow control, prioritization and header compression, making it very different (even incompatible) from its predecessor HTTP/1.
MHD
GNU libmicrohttpd (MHD) is a small and fast C library that implements HTTP server functionality. Some of its implementation characteristics include: different threading models, a reentrant API, fully HTTP/1.0 and HTTP/1.1 compliant.
MHD can be used in different platforms and in embedded systems without thread support, thanks to its small binary size and high performance.
The project: MHD + HTTP/2
The goal of this project is to add HTTP/2 support to MHD.
The HTTP/2 stack is already implemented by an existing library nghttp2, used by well-known projects such as curl. I will use this library for the low level protocol handling parts and write the functionality to handle the HTTP/2 connections.
MHD has a tightly coupled implementation of HTTP/1, so adding HTTP/2 support is not straightforward. I will create an interface between the TCP connection and the HTTP protocol, in order to have an easy and transparent way to switch between protocols (especially to support an HTTP/2 upgrade).
Follow the project at github!