143 lines
4.5 KiB
Text
143 lines
4.5 KiB
Text
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
|