README 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. About
  2. =====
  3. GNU libmicrohttpd is a GNU package offering a C library that provides
  4. a compact API and implementation of an HTTP 1.1 web server (HTTP 1.0
  5. is also supported). GNU libmicrohttpd only implements the HTTP 1.1
  6. protocol. The main application must still provide the application
  7. logic to generate the content.
  8. Additionally, a second, still very experimental library is provided
  9. for SPDY (the base for HTTP 2.0) support. libmicrospdy provides a
  10. compact API and implementation of SPDY server. libmicrospdy currently
  11. only implements partially version 3 of SPDY.
  12. Installation
  13. ============
  14. If you are using Subversion, run "autoreconf -fi" to create configure.
  15. In order to run the testcases, you need a recent version of libcurl.
  16. libcurl is not required if you just want to install the library.
  17. Especially for development, do use the MHD_USE_DEBUG option to get
  18. error messages.
  19. Requirements for libmicrospdy
  20. =============================
  21. The following packages are needed to build libmicrospdy:
  22. * zlib
  23. * OpenSSL >= 1.0.1
  24. To run the test cases, involving requests, version of Spdylay, supporting
  25. SPDY v3, is required. Spdylay is still under development and can be
  26. found here:
  27. http://spdylay.sourceforge.net/
  28. Configure options
  29. =================
  30. If you are concerned about space, you should set "CFLAGS" to "-Os
  31. -fomit-frame-pointer" to have gcc generate tight code.
  32. You can use the following options to disable certain MHD features:
  33. --disable-https: no HTTPS / TLS / SSL support (significant reduction)
  34. --disable-messages: no error messages (they take space!)
  35. --disable-postprocessor: no MHD_PostProcessor API
  36. --disable-dauth: no digest authentication API
  37. --disable-epoll: no support for epoll, even on Linux
  38. The resulting binary should be about 30-40k depending on the platform.
  39. Portability
  40. ===========
  41. The latest version of libmicrohttpd will try to avoid SIGPIPE on its
  42. sockets. This should work on OS X, Linux and recent BSD systems (at
  43. least). On other systems that may trigger a SIGPIPE on send/recv, the
  44. main application should install a signal handler to handle SIGPIPE.
  45. libmicrohttpd should work well on GNU/Linux, BSD, OS X, W32 and z/OS.
  46. Note that HTTPS is not supported on z/OS (yet). We also have reports
  47. of users using it on vxWorks and Symbian. Note that on platforms
  48. where the compiler does not support the "constructor" attribute, you
  49. must call "MHD_init" before using any MHD functions and "MHD_fini"
  50. after you are done using MHD.
  51. Development Status
  52. ==================
  53. This is a beta release for libmicrohttpd. Before declaring the
  54. library stable, we should implement support for HTTP "Upgrade"
  55. requests and have testcases for the following features:
  56. - HTTP/1.1 pipelining (need to figure out how to ensure curl pipelines
  57. -- and it seems libcurl has issues with pipelining,
  58. see http://curl.haxx.se/mail/lib-2007-12/0248.html)
  59. - resource limit enforcement
  60. - client queuing early response, suppressing 100 CONTINUE
  61. - chunked encoding to validate handling of footers
  62. - more testing for SSL support
  63. - MHD basic and digest authentication
  64. In particular, the following functions are not covered by 'make check':
  65. - mhd_panic_std (daemon.c); special case (abort)
  66. - parse_options (daemon.c)
  67. - MHD_set_panic_func (daemon.c)
  68. - MHD_get_version (daemon.c)
  69. This is an early alpha release for libmicrospdy. The following things
  70. should be implemented (in order of importance) before we can claim to
  71. be reasonably complete:
  72. - 8 different output queues (one for each priority) have to be implemented
  73. together with a suitable algorithm for utilizing them. Otherwise, downloading
  74. a file will block all responses with same or smaller priority
  75. - SPDY RST_STREAM sending on each possible error (DONE?)
  76. - SPDY_close_session
  77. - Find the best way for closing still opened stream (new call or existing)
  78. - SPDY_is_stream_opened
  79. - SPDY PING (used often by browsers)
  80. - receiving SPDY WINDOW_UPDATE
  81. - SPDY Settings
  82. - SPDY PUSH
  83. - SPDY HEADERS
  84. - SPDY Credentials
  85. Additional ideas for features include:
  86. - Individual callbacks for each session
  87. - Individual timeout for each session
  88. Unimplemented API functions of libmicrospdy:
  89. - SPDY_settings_create ();
  90. - SPDY_settings_add (...);
  91. - SPDY_settings_lookup (...);
  92. - SPDY_settings_iterate (...);
  93. - SPDY_settings_destroy (...);
  94. - SPDY_close_session(...);
  95. - SPDY_send_ping(...);
  96. - SPDY_send_settings (...);
  97. In particular, we should write tests for:
  98. - Enqueueing responses while considering request priorities.
  99. - HTTP methods other than GET
  100. Missing documentation:
  101. ======================
  102. - libmicrospdy manual:
  103. * missing entirely