|
| 1 | +Web 19 Dec 2021 18:30:00 MSK |
| 2 | +Released GNU libmicrohttpd 0.9.74 |
| 3 | + |
| 4 | + This release brings a lot of fixes and improvements, and |
| 5 | + important new features. |
| 6 | + The most significant addition is the new experimental |
| 7 | + implementation of WebSockets contributed by David Gausmann. This |
| 8 | + implementation is not fully tested yet so currently it is disabled |
| 9 | + by default. |
| 10 | + Other changes include a lot of improvements and clarifications |
| 11 | + in doxy comments in microhttpd.h header file, improved compliance |
| 12 | + with the RFC HTTP specifications, the new implementation of reply |
| 13 | + header forming, the new implementation of request chunked encoding |
| 14 | + parsing, new automatic error replies, internal optimisations, and |
| 15 | + many important fixes, including fixes for long-standing bugs. |
| 16 | + |
| 17 | + More detailed list of notable changes: |
| 18 | + |
| 19 | + API changes: |
| 20 | + + Added new function MHD_get_reason_phrase_len_for(). |
| 21 | + + Added MHD_CONNECTION_INFO_HTTP_STATUS type of information |
| 22 | + queried by MHD_get_connection_info(). |
| 23 | + + Added new response flag MHD_RF_SEND_KEEP_ALIVE_HEADER to force |
| 24 | + sending of "keep-alive" header even if not required by RFC. |
| 25 | + + Added new response creation function |
| 26 | + MHD_create_response_from_buffer_with_free_callback_cls() with |
| 27 | + custom cleanup callback. |
| 28 | + + Added new response flag MHD_RF_HTTP_1_0_COMPATIBLE_STRICT with |
| 29 | + the same functionality as existing MHD_RF_HTTP_VERSION_1_0_ONLY |
| 30 | + flag. The old flag will be deprecated. |
| 31 | + + Added new response flag MHD_RF_HTTP_1_0_SERVER with the same |
| 32 | + functionality as existing MHD_RF_HTTP_VERSION_1_0_RESPONSE flag. |
| 33 | + The old flag will be deprecated. |
| 34 | + |
| 35 | + New features: |
| 36 | + + Added experimental WebSockets extension with separate header. |
| 37 | + Disabled by default as it is not fully tested yet. |
| 38 | + + Added '--enable-sanitizers[=address,undefined,leak,user-poison]' |
| 39 | + configure parameter (instead of '--enable-sanitizer'), |
| 40 | + implemented custom memory poisoning for memory pools. |
| 41 | + |
| 42 | + Improvements and enhancements: |
| 43 | + * Doxy function descriptions was corrected, clarified, extended, |
| 44 | + and improved. Now it should be much easier to learn MHD just by |
| 45 | + reading the headers. |
| 46 | + * Completely rewritten reply header forming. New implementation is |
| 47 | + more robust, simpler maintainable and expandable, and better |
| 48 | + follows RFC HTTP specifications. |
| 49 | + * Performance improvements: now HTTP version and request method are |
| 50 | + decoded one time only (previously MHD used string comparison many |
| 51 | + times during processing the data). |
| 52 | + * Rewritten request chunked payload decoding. The new |
| 53 | + implementation better conforms to the HTTP RFC, detects format |
| 54 | + problems earlier, replies to the clients with description of |
| 55 | + detected problems, handles untypical (but syntactically correct) |
| 56 | + values properly. |
| 57 | + * Added special replies for wrong/unsupported HTTP versions in |
| 58 | + requests, broken HTTP chunked encoding in requests, |
| 59 | + * As required by HTTP RFC, added automatic error replies if client |
| 60 | + used broken chunked encoding, too large chunk size, too large |
| 61 | + payload size, or broken Content-Length header. |
| 62 | + * Optimized connection's memory pool handling. |
| 63 | + * Changed timeout precision from one second to one millisecond. |
| 64 | + * Added some checks for incorrect user data, reporting problems in |
| 65 | + MHD log. |
| 66 | + * Improved performance of hash calculations functions by using |
| 67 | + compiler built-ins (if available). |
| 68 | + * Implemented SHA-1 calculations (required for WebSockets). |
| 69 | + * Added universal MSVC project that works with any (sufficiently |
| 70 | + new) version of MSVC. |
| 71 | + * Developed simple HTTP client to test MHD under very special |
| 72 | + conditions. |
| 73 | + * Implemented 45 new tests. |
| 74 | + * Improved existing tests to test more aspects of MHD. |
| 75 | + * Added check for correct results of system and libcurl functions. |
| 76 | + * Response headers are checked during forming of responses. |
| 77 | + * HTTPS tests were improved. |
| 78 | + * Added rebuild on W32 of all required files if files are missing. |
| 79 | + * Many internal optimisations and improvements. |
| 80 | + |
| 81 | + Functionality changes: |
| 82 | + * Keep-alive header is omitted by default for HTTP/1.1 connections. |
| 83 | + Use of header can be enforced by response flag. |
| 84 | + * Chunked encoding is used for HTTP/1.1 non-keep-alive connections |
| 85 | + for responses with unknown size. Previously MHD used "indication |
| 86 | + of the end of the response by closing connection" in such cases, |
| 87 | + however it is not correct for HTTP/1.1 connections as per HTTP |
| 88 | + RFC. |
| 89 | + * As required by HTTP RFC, use HTTP/1.1 version instead of HTTP/1.0 |
| 90 | + in reply headers when client is HTTP/1.0 . HTTP/1.0 version can |
| 91 | + be enforced by response flag. |
| 92 | + * User response headers are used in replies in the same order as |
| 93 | + was added by application. |
| 94 | + * Allowed tab characters in response header values. |
| 95 | + * All custom "Connection:" response headers are automatically |
| 96 | + combined into single "Connection:" header. |
| 97 | + * "keep-alive" token silently dropped from custom "Connection:" |
| 98 | + response header. "Keep-alive" cannot be enforced and used |
| 99 | + automatically if possible. |
| 100 | + * Allow tab character in custom response header value. |
| 101 | + * Disallow space character in custom response header value. |
| 102 | + * Do not allow responses with 1xx codes for HTTP/1.0 requests. |
| 103 | + * Detected and reported incorrect "Upgrade" responses. |
| 104 | + * W32 targets are changed to Vista+ by default. XP is supported |
| 105 | + still. |
| 106 | + |
| 107 | + Fixes: |
| 108 | + # Fixed short busy-waiting (up to one second) when connection is |
| 109 | + going to be expired and closed. |
| 110 | + # Fixed handling of errors during start of new connection, fixed |
| 111 | + inability to accept new connections in thread-per-connection mode |
| 112 | + due to the missing decrement of number of daemon's connections if |
| 113 | + start of new thread is failed. |
| 114 | + # Fixed incorrect parsing of LFLF, LFCR, CRCR, and bare CR as |
| 115 | + single linefeed in request header and request chunked payload. |
| 116 | + Now only CRLF or bare LF are recognized as linefeed. |
| 117 | + # Fixed response chunked encoding handling. Now it works properly |
| 118 | + with non-keep-alive connection, with fixed size replies (if |
| 119 | + chunked was enforced by header), and in other situations. |
| 120 | + # Other fixes for chunked replies. |
| 121 | + # Fixed handling of custom connection timeout in thread-per- |
| 122 | + connection mode. |
| 123 | + # Fixed wrongly used MHD_REQUEST_TERMINATED_COMPLETED_OK code for |
| 124 | + application notification when MHD_REQUEST_TERMINATED_WITH_ERROR |
| 125 | + code must be used. |
| 126 | + # Fixed code MHD_REQUEST_TERMINATED_READ_ERROR not reported (code |
| 127 | + MHD_REQUEST_TERMINATED_WITH_ERROR was incorrectly used instead). |
| 128 | + # Fixed handling of request chunked encoding with untypical |
| 129 | + formatting. |
| 130 | + # Fixed processing of last part of hex-encoded values under |
| 131 | + certain conditions. |
| 132 | + # Fixed value returned for MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE. |
| 133 | + # Fixed returned value for MHD_FEATURE_AUTOSUPPRESS_SIGPIPE on W32, |
| 134 | + now it is MHD_YES as W32 does not need SIGPIPE suppression. |
| 135 | + # Fixed portability of bitwise NOT for enums values. |
| 136 | + # Fixed SHA-256 and MD5 calculations with unaligned data. |
| 137 | + # Fixed incorrect caseless matching for HTTP version. |
| 138 | + # Fixed incorrect caseless matching for request method. |
| 139 | + # Fixed compatibility with old GnuTLS versions. |
| 140 | + # Fixed compiler warnings on 32-bits platforms. |
| 141 | + # Fixed blocking sockets setting in tests and examples for W32. |
| 142 | + # Fixed examples to really use libmagic if present. |
| 143 | + # HTTPS tests were fixed. |
| 144 | + # Fixed libcurl test with case-insensitive match for HTTP methods, |
| 145 | + method names must use case-sensitive match. |
| 146 | + # Fixed tests compatibility with old libcurl versions. |
| 147 | + # Fixed build on W32 with llvm-dlltool (this tool is too |
| 148 | + oversimplified) |
| 149 | + |
| 150 | + -- Evgeny Grin (Karlson2k) |
| 151 | + |
| 152 | + |
1 | 153 | Sun 25 Apr 2021 14:00:00 MSK |
2 | 154 | Released GNU libmicrohttpd 0.9.73 |
3 | 155 |
|
|
0 commit comments