| 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. |
| |
| GNU libmicrohttpd is dual-licensed under the GNU Lesser General Public |
| License (LGPLv2.1+) and the eCos License. See COPYING for details. |
| |
| |
| Joining GNU |
| =========== |
| |
| This is a GNU program, developed by the GNU Project and part of the |
| GNU Operating System. If you are the author of an awesome program and |
| want to join us in writing Free Software, please consider making it an |
| official GNU program and become a GNU maintainer. You can find |
| instructions on how to do so at http://www.gnu.org/help/evaluation. |
| We are looking forward to hacking with you! |
| |
| |
| Installation |
| ============ |
| |
| See INSTALL for generic installation instructions. |
| |
| If you are using Git, run "./bootstrap" 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_ERROR_LOG option to get |
| error messages. |
| |
| |
| 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, W32, FreeBSD, Darwin, |
| NetBSD, OpenBSD, Solaris/OpenIndiana, and z/OS. |
| Note that HTTPS is not supported on z/OS (yet). We also have reports |
| of users using it on vxWorks. |
| |
| |
| Development Status |
| ================== |
| |
| This is a beta release for libmicrohttpd. Before declaring the |
| library stable, we should 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 (mhd_panic.c); special case (abort) |
| - parse_options (daemon.c) |
| - MHD_get_version (daemon.c) |
| |
| |
| Note that the working library is in src/microhttpd/ with the API in |
| src/include/microhttpd.h. An *experimental* (read: not yet working |
| at all) newer implementation is in src/lib/, with the new API in |
| src/include/microhttpd2.h. The experimental code will need MUCH |
| more testing and development, you are strongly advised to stick |
| to microhttpd.h unless you are a MHD developer! |