HTTP/3 server options 2023

by Wayne Smith

HTTP/3 is still considered by some to be in the development/experimental stage. It has not been vetted over time like HTTP/1 and HTTP/2. Some of the features it may ultimately include such as WebTransport requiring a self-signed TLS certificate IE OpenSSL ... are still being worked on.

Why Deploy HTTP/3?

Like HTTP/1, HTTP/2 has some areas where, if HTTP/2 were redesigned may be very different. HTTP/2's prioritization system does not reprioritize requests. When multiple files are requested say file1, file2, ..., file10; And file11 is added to the list, let us say file11 is an important file that needs to be downloaded to paint the page. File11 can not be repositioned to download before file5; A head-of-line (HoL) blocking problem! -- the browser must wait for files 1 through 10 which it already prioritized before file11 starts downloading.

HTTP/2 does not like moving targets. The optimal route for mobile devices may change as the mobile device moves. HTTP/3 does not have a problem with this it just sends everything and if something does not arrive sends the missing pieces.

One could try to resolve the HoL blocking by downloading file11 from a CDN or different domain, but the time to spin up an HTTPS connection is longer than the time to spin up an HTTP/1 connection and file11 may get downloaded on the HTTP/2 connection which solved the HTTPS spin-up time before the solution used in the past with HTTP/1 connections downloads the file from a different domain.

The change on HTTP/3 is that all files are sent as fast as they become available via low-latency UDP packets. File11 starts being sent as soon as it is available on the server. The stream of data may look for like, [(1)(2)(1)(2)(3)(4)(11)(2)(5) ... ], the browser reassembles, file1 parts 1-2, file 2 parts 1-3 et la. [file11 got sent between file4 and the end of file2]. And, the resultant stream is going to be based on how HTTP/3 is implemented. As stated above some consider HTTP/3 to be at the experimental stage.

HTTP/3 is faster than HTTP/2 out of the box as UDP packets are low-latency. With TCP each packet is confirmed to have arrived and the browser gets a complete file with no assembly required. A lost UDP packet would need to be requested again; However, a lost or dropped TCP packet also needs to be requested again, when a packet is lost the router that lost it does not send a message that it lost the packet. Instead under TCP, the network makes another request for the lost packet onwards -- until it has the whole file, (no assembly required), to deliver to the browser. In some cases such as audio, video, or gaming a dropped frame can be ignored and handled by the application.

Who needs HTTP/2?

A 10% difference in traffic for a company, depending on the quality of the traffic, can mean a 10% difference in sales and a 10% difference in ROI. And, if other sites are only supporting HTTP/3 and 10% can not use HTTP/3 then the effect is increased.

Legacy systems both old versions of iPhones that can no longer upgrade, and out-of-date Chromebooks for the most part are not going to be using HTTP/3.

Security software needs to fully vet their software with HTTP/3. Since the complete file may be downloaded out of order these programs also need to support HTTP/3 in their design.

Windows Server 2022 natively supports HTTP/3

Windows Server would be Microsoft's proprietary solution. Woshub shows how to enable HTTP/3 it's not in the GUI. It has had performance upgrades but still falls behind Apache or Nginx. However, it is still used by high-traffic websites, even more than Apache. Where it leads is in terms of support and for configuration it uses a graphical user interface, which some may find easier.

Apache Traffic Server as HTTP/3 front end

Like using Nginx as a front end with Apache the same can be configured using Apache Traffic Server. It accepts the HTTP/3 requests and passes them through to the service. It caches unchanged requests increasing the throughput. Apache Traffic Server will accept and deliver HTTP/3 but Apache will be delivering HTTP/2 or HTTP/1 to the traffic server.

Nginx web server

Nginx is not a drop-in replacement for Apache, it does not use .htaccess or other Apache configuration files or modules which are used by a large number of PHP applications, and for a number of configuration scenarios. These .htaccess allow applications or virtual hosts to have different configurations without changing the configuration of the server itself. To install WordPress on a Nginx server one would need access to the /etc/nginx/sites-available directory which is normally only available to the root user (system admin). Nginx lacks the feasibility of Apache as it does offer a directory-level configuration, instead using configuration uses the URI to select a resource or microservice/backend.

Nginx was built with performance in mind, it spawns a worker for each event while Apache is more conservative and spawns a fresh thread for each request. With static files Nginx performs better than Apache, it also adds a higher CPU load. With dynamic content, Nginx passes the workload onto the program that is generating the content, while Apache is more involved in this process. In regards to memory usage, Nginx uses less memory but also relies on other programs to deliver dynamic content which would need memory and each thread requires memory. Expect Nginx to outperform Apache for speed but the exact amounts are going to vary. It should also be noted that HTTP/3 is also going to add load onto the CPU.

Nginx as a HTTP/3 front end with Apache as a service

One solution to still get the advantage of Apache for legacy applications is to configure the system so that Nginx accepts the HTTP/3 requests and when the resource is static it provides it and when it is the application that needs Apache, it passes the request to Apache.

LiteSpeed Caching Web Server

LiteSpeed has OpenLiteSpeed which is open source and LiteSpeed Web Server which is a paid model. Configuration is done through a graphical user interface through the browser, and HTTP/3 can be turned on in minutes. Azdigi has the steps to enable HTTP/3.

LiteSpeed also has cutting-edge cache, security, cpanel application installations, support for .htaccess, and more.

Given the cutting-edge cache system used by Litespeed, it has a speed advantage over Nginx, Apache, and Windows Server. Cache is used to deliver content while Nginx is making its request to the service, but Cache does not work for gaming or WebRTC communications which don't have an already prepared answer. But is a time saver for HTTP/3 requests which may take place over a wifi connection where data needs to be resent.

Cloudflare HTTP/3 Server

Cloudflare hosts sites on its proprietary network, which supports HTTP/3. They are not software applications that can be independently installed but are often part of the discussion when it comes to an advanced web server.

Cloudflare is both a CDN with cutting-edge security, cache, et la. It has higher speeds than any non-distributed host.

Non-Proprietary Servers to also look at for HTTP/3

Caddy, Hypercorn, and growing