Thanks a lot for this new release! 🍻

On Sun, Dec 19, 2021 at 1:13 PM Evgeny Grin <k...@yandex.ru> wrote:

> Dear all,
>
> I'm very glad to finally announce the new release of GNU libmicrohttpd
> library version 0.9.74.
> This release brings a lot of fixes and improvements, and
> important new features.
> The most significant addition is the new experimental
> implementation of WebSockets contributed by David Gausmann. This
> implementation is not fully tested yet so currently it is disabled
> by default.
> Other changes include a lot of improvements and clarifications
> in doxy comments in microhttpd.h header file, improved compliance
> with the RFC HTTP specifications, the new implementation of reply
> header forming, the new implementation of request chunked encoding
> parsing, new automatic error replies, internal optimisations, and
> many important fixes, including fixes for long-standing bugs.
>
> More detailed list of notable changes:
>
> API changes:
> + Added new function MHD_get_reason_phrase_len_for().
> + Added MHD_CONNECTION_INFO_HTTP_STATUS type of information
>    queried by MHD_get_connection_info().
> + Added new response flag MHD_RF_SEND_KEEP_ALIVE_HEADER to force
>    sending of "keep-alive" header even if not required by RFC.
> + Added new response creation function
>    MHD_create_response_from_buffer_with_free_callback_cls() with
>    custom cleanup callback.
> + Added new response flag MHD_RF_HTTP_1_0_COMPATIBLE_STRICT with
>    the same functionality as existing MHD_RF_HTTP_VERSION_1_0_ONLY
>    flag. The old flag will be deprecated.
> + Added new response flag MHD_RF_HTTP_1_0_SERVER with the same
>    functionality as existing MHD_RF_HTTP_VERSION_1_0_RESPONSE flag.
>    The old flag will be deprecated.
>
> New features:
> + Added experimental WebSockets extension with separate header.
>    Disabled by default as it is not fully tested yet.
> + Added '--enable-sanitizers[=address,undefined,leak,user-poison]'
>    configure parameter (instead of '--enable-sanitizer'),
>    implemented custom memory poisoning for memory pools.
>
> Improvements and enhancements:
> * Doxy function descriptions was corrected, clarified, extended,
>    and improved. Now it should be much easier to learn MHD just by
>    reading the headers.
> * Completely rewritten reply header forming. New implementation is
>    more robust, simpler maintainable and expandable, and better
>    follows RFC HTTP specifications.
> * Performance improvements: now HTTP version and request method are
>    decoded one time only (previously MHD used string comparison many
>    times during processing the data).
> * Rewritten request chunked payload decoding. The new
>    implementation better conforms to the HTTP RFC, detects format
>    problems earlier, replies to the clients with description of
>    detected problems, handles untypical (but syntactically correct)
>    values properly.
> * Added special replies for wrong/unsupported HTTP versions in
>    requests, broken HTTP chunked encoding in requests,
> * As required by HTTP RFC, added automatic error replies if client
>    used broken chunked encoding, too large chunk size, too large
>    payload size, or broken Content-Length header.
> * Optimized connection's memory pool handling.
> * Changed timeout precision from one second to one millisecond.
> * Added some checks for incorrect user data, reporting problems in
>    MHD log.
> * Improved performance of hash calculations functions by using
>    compiler built-ins (if available).
> * Implemented SHA-1 calculations (required for WebSockets).
> * Added universal MSVC project that works with any (sufficiently
>    new) version of MSVC.
> * Developed simple HTTP client to test MHD under very special
>    conditions.
> * Implemented 45 new tests.
> * Improved existing tests to test more aspects of MHD.
> * Added check for correct results of system and libcurl functions.
> * Response headers are checked during forming of responses.
> * HTTPS tests were improved.
> * Added rebuild on W32 of all required files if files are missing.
> * Many internal optimisations and improvements.
>
> Functional changes:
> * Keep-alive header is omitted by default for HTTP/1.1 connections.
>    Use of header can be enforced by response flag.
> * Chunked encoding is used for HTTP/1.1 non-keep-alive connections
>    for responses with unknown size. Previously MHD used "indication
>    of the end of the response by closing connection" in such cases,
>    however it is not correct for HTTP/1.1 connections as per HTTP
>    RFC.
> * As required by HTTP RFC, use HTTP/1.1 version instead of HTTP/1.0
>    in reply headers when client is HTTP/1.0 . HTTP/1.0 version can
>    be enforced by response flag.
> * User response headers are used in replies in the same order as
>    was added by application.
> * Allowed tab characters in response header values.
> * All custom "Connection:" response headers are automatically
>    combined into single "Connection:" header.
> * "keep-alive" token silently dropped from custom "Connection:"
>    response header. "Keep-alive" cannot be enforced and used
>    automatically if possible.
> * Allow tab character in custom response header value.
> * Disallow space character in custom response header value.
> * Do not allow responses with 1xx codes for HTTP/1.0 requests.
> * Detected and reported incorrect "Upgrade" responses.
> * W32 targets are changed to Vista+ by default. XP is supported
>    still.
>
> Fixes:
> # Fixed short busy-waiting (up to one second) when connection is
>    going to be expired and closed.
> # Fixed handling of errors during start of new connection, fixed
>    inability to accept new connections in thread-per-connection mode
>    due to the missing decrement of number of daemon's connections if
>    start of new thread is failed.
> # Fixed incorrect parsing of LFLF, LFCR, CRCR, and bare CR as
>    single linefeed in request header and request chunked payload.
>    Now only CRLF or bare LF are recognized as linefeed.
> # Fixed response chunked encoding handling. Now it works properly
>    with non-keep-alive connection, with fixed size replies (if
>    chunked was enforced by header), and in other situations.
> # Other fixes for chunked replies.
> # Fixed handling of custom connection timeout in thread-per-
>    connection mode.
> # Fixed wrongly used MHD_REQUEST_TERMINATED_COMPLETED_OK code for
>    application notification when MHD_REQUEST_TERMINATED_WITH_ERROR
>    code must be used.
> # Fixed code MHD_REQUEST_TERMINATED_READ_ERROR not reported (code
>    MHD_REQUEST_TERMINATED_WITH_ERROR was incorrectly used instead).
> # Fixed handling of request chunked encoding with untypical
>    formatting.
> # Fixed processing of last part of hex-encoded values under
>    certain conditions.
> # Fixed value returned for MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE.
> # Fixed returned value for MHD_FEATURE_AUTOSUPPRESS_SIGPIPE on W32,
>    now it is MHD_YES as W32 does not need SIGPIPE suppression.
> # Fixed portability of bitwise NOT for enums values.
> # Fixed SHA-256 and MD5 calculations with unaligned data.
> # Fixed incorrect caseless matching for HTTP version.
> # Fixed incorrect caseless matching for request method.
> # Fixed compatibility with old GnuTLS versions.
> # Fixed compiler warnings on 32-bits platforms.
> # Fixed blocking sockets setting in tests and examples for W32.
> # Fixed examples to really use libmagic if present.
> # HTTPS tests were fixed.
> # Fixed libcurl test with case-insensitive match for HTTP methods,
>    method names must use case-sensitive match.
> # Fixed tests compatibility with old libcurl versions.
> # Fixed build on W32 with llvm-dlltool (this tool is too
>    oversimplified)
>
>
> You can download GNU libmicrohttpd from
>
> * https://ftp.gnu.org/gnu/libmicrohttpd/ and all GNU FTP mirrors.
> * Our git repository at https://gnunet.org/git/libmicrohttpd.git
>
> Please report bugs to our bugtracker at
> https://bugs.gnunet.org/set_project.php?project_id=10.
>
> The documentation (including a reference manual and tutorial) can be
> found at https://gnu.org/s/libmicrohttpd.
>
> --
> Best Wishes,
> Evgeny
>
>

-- 
Silvio Clécio

Reply via email to