| About |
| ===== |
| |
| GNU libmicrohttpd is a GNU package offering a C library that provides |
| a compact API and implementation of an HTTP 1.1 web server (HTTP 1.0 |
| is also supported). GNU libmicrohttpd only implements the HTTP 1.1 |
| protocol. The main application must still provide the application |
| logic to generate the content. |
| |
| Additionally, a second, still very experimental library is provided |
| for SPDY (the base for HTTP 2.0) support. libmicrospdy provides a |
| compact API and implementation of SPDY server. libmicrospdy currently |
| only implements partially version 3 of SPDY. |
| |
| |
| Installation |
| ============ |
| |
| If you are using Subversion, run "autoreconf -fi" to create configure. |
| |
| In order to run the testcases, you need a recent version of libcurl. |
| libcurl is not required if you just want to install the library. |
| |
| Especially for development, do use the MHD_USE_DEBUG option to get |
| error messages. |
| |
| |
| Requirements for libmicrospdy |
| ============================= |
| |
| The following packages are needed to build libmicrospdy: |
| |
| * zlib |
| * OpenSSL >= 1.0.1 |
| |
| To run the test cases, involving requests, version of Spdylay, supporting |
| SPDY v3, is required. Spdylay is still under development and can be |
| found here: |
| |
| http://spdylay.sourceforge.net/ |
| |
| |
| Configure options |
| ================= |
| |
| |
| If you are concerned about space, you should set "CFLAGS" to "-Os |
| -fomit-frame-pointer" to have gcc generate tight code. |
| |
| You can use the following options to disable certain MHD features: |
| |
| --disable-https: no HTTPS / TLS / SSL support (significant reduction) |
| --disable-messages: no error messages (they take space!) |
| --disable-postprocessor: no MHD_PostProcessor API |
| --disable-dauth: no digest authentication API |
| --disable-epoll: no support for epoll, even on Linux |
| |
| The resulting binary should be about 30-40k depending on the platform. |
| |
| |
| Portability |
| =========== |
| |
| The latest version of libmicrohttpd will try to avoid SIGPIPE on its |
| sockets. This should work on OS X, Linux and recent BSD systems (at |
| least). On other systems that may trigger a SIGPIPE on send/recv, the |
| main application should install a signal handler to handle SIGPIPE. |
| |
| libmicrohttpd should work well on GNU/Linux, BSD, OS X, W32 and z/OS. |
| Note that HTTPS is not supported on z/OS (yet). We also have reports |
| of users using it on vxWorks and Symbian. Note that on platforms |
| where the compiler does not support the "constructor" attribute, you |
| must call "MHD_init" before using any MHD functions and "MHD_fini" |
| after you are done using MHD. |
| |
| |
| Development Status |
| ================== |
| |
| This is a beta release for libmicrohttpd. Before declaring the |
| library stable, we should implement support for HTTP "Upgrade" |
| requests and have testcases for the following features: |
| |
| - HTTP/1.1 pipelining (need to figure out how to ensure curl pipelines |
| -- and it seems libcurl has issues with pipelining, |
| see http://curl.haxx.se/mail/lib-2007-12/0248.html) |
| - resource limit enforcement |
| - client queuing early response, suppressing 100 CONTINUE |
| - chunked encoding to validate handling of footers |
| - more testing for SSL support |
| - MHD basic and digest authentication |
| |
| In particular, the following functions are not covered by 'make check': |
| - mhd_panic_std (daemon.c); special case (abort) |
| - parse_options (daemon.c) |
| - MHD_set_panic_func (daemon.c) |
| - MHD_get_version (daemon.c) |
| |
| |
| This is an early alpha release for libmicrospdy. The following things |
| should be implemented (in order of importance) before we can claim to |
| be reasonably complete: |
| - 8 different output queues (one for each priority) have to be implemented |
| together with a suitable algorithm for utilizing them. Otherwise, downloading |
| a file will block all responses with same or smaller priority |
| - SPDY RST_STREAM sending on each possible error (DONE?) |
| - SPDY_close_session |
| - Find the best way for closing still opened stream (new call or existing) |
| - SPDY_is_stream_opened |
| - SPDY PING (used often by browsers) |
| - receiving SPDY WINDOW_UPDATE |
| - SPDY Settings |
| - SPDY PUSH |
| - SPDY HEADERS |
| - SPDY Credentials |
| |
| Additional ideas for features include: |
| - Individual callbacks for each session |
| - Individual timeout for each session |
| |
| Unimplemented API functions of libmicrospdy: |
| - SPDY_settings_create (); |
| - SPDY_settings_add (...); |
| - SPDY_settings_lookup (...); |
| - SPDY_settings_iterate (...); |
| - SPDY_settings_destroy (...); |
| - SPDY_close_session(...); |
| - SPDY_send_ping(...); |
| - SPDY_send_settings (...); |
| |
| In particular, we should write tests for: |
| - Enqueueing responses while considering request priorities. |
| - HTTP methods other than GET |
| |
| |
| |
| |
| |
| Missing documentation: |
| ====================== |
| |
| - libmicrospdy manual: |
| * missing entirely |