123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- 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
|