Get the most out of your Centmin Mod LEMP stack
Become a Member

Nginx Official Nginx HTTP/3 QUIC Tech Preview announced

Discussion in 'Nginx and PHP-FPM news & discussions' started by eva2000, Jun 11, 2020.

  1. eva2000

    eva2000 Administrator Staff Member

    44,525
    10,170
    113
    May 24, 2014
    Brisbane, Australia
    Ratings:
    +15,742
    Local Time:
    2:26 AM
    Nginx 1.17.x
    MariaDB 5.5/10.x
    Looks like Nginx folks have released a separate Nginx development branch for official Nginx HTTP/3 QUIC tech preview with Nginx 1.19+ mainline versions built against BoringSSL QUIC with current HTTP/3 h3-27 draft at Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3 - NGINX. Official Nginx HTTP/3 QUIC isn't the same as Cloudflare's released Nginx HTTP/3 QUIC patch which is built with Cloudflare Quiche/BoringSSL for current HTTP/3 h3-29 draft against Nginx 1.16.1 stable only. However, I will be setting up a separate Centmin Mod 123.09beta01 preview branch for adding official Nginx HTTP/3 QUIC support for testing along side Cloudflare's Nginx HTTP/3 QUIC patch :D

    Actual nginx-quic preview branch readme notes at https://hg.nginx.org/nginx-quic/file/tip/README which highlights not all HTTP/3 QUIC features have been fully implemented yet.

    Code (Text):
    1. Introduction
    
        This is an experimental QUIC [1] / HTTP/3 [2] support for nginx.
    
        The code is developed in a separate "quic" branch available
        at https://hg.nginx.org/nginx-quic.  Currently it is based
        on nginx mainline 1.19.x. We are planning to merge new nginx
        releases into this branch regularly.
    
        The project code base is under the same BSD license as nginx.
    
        The code is at an early alpha level of quality and should not
        be used in production.
    
        We are working on improving HTTP/3 support with the goal of
        integrating it to the main NGINX codebase.  Expect frequent
        updates of this code and don't rely on it for whatever purpose.
    
        We'll be grateful for any feedback and code submissions however
        we don't bear any responsibilities for any issues with this code.
    
        You can always contact us via nginx-devel mailing list [3].
    
        What works now:
    
        Currently we support IETF-QUIC draft 27
        Earlier drafts are NOT supported as they have incompatible wire format;
    
        Newer drafts development (draft-28 at the time of writing) is in progress.
        You may look at src/event/ngx_event_quic.h for alternative values of the
        NGX_QUIC_DRAFT_VERSION macro used to select IETF draft version number.
    
        nginx should be able to respond to simple HTTP/3 requests over QUIC and
        it should be possible to upload and download big files without errors.
    
        + The handshake completes successfully
        + One endpoint can update keys and its peer responds correctly
        + 0-RTT data is being received and acted on
        + Connection is established using TLS Resume Ticket
        + A handshake that includes a Retry packet completes successfully
        + Stream data is being exchanged and ACK'ed
        + An H3 transaction succeeded
        + One or both endpoints insert entries into dynamic table and
          subsequently reference them from header blocks
    
         Not (yet) supported features:
    
        - Version negotiation
        - ECN, Congestion control and friends as specified in quic-recovery [5]
        - A connection with the spin bit succeeds and the bit is spinning
        - Structured Logging
        - QUIC recovery (proper congestion and flow control)
        - NAT Rebinding
        - Address Mobility
        - Server push
        - HTTP/3 trailers
    
        Since the code is experimental and still under development,
        a lot of things may not work as expected, for example:
    
        - ACK handling is basic: every received ack-eliciting packet
          is acknowledged, no ack ranges are used
    
        - Flow control mechanism is basic and intended to avoid CPU hog and make
          simple interactions possible
    
        - Not all draft requirements are strictly followed; some of checks are
          omitted for the sake of simplicity of initial implementation
     
  2. buik

    buik “Winners never quit, and quitters never win.” Premium Member

    1,276
    343
    83
    Apr 29, 2016
    Ratings:
    +1,032
    Local Time:
    6:26 PM
    Nice!
    'The first blow is half the battle' :)
    Will see when its ready to go!

    For now, more than half of the important functions have not been implemented.

    Most important is that HTTP/3 is by far not final yet.
    Given the bickering at HTTP/2 that will take some time. (Too many stakeholders and layers)
     
    Last edited: Jun 11, 2020