Skip to content
Maru Berezin edited this page May 12, 2019 · 7 revisions

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!

Clone this wiki locally