Caddyhttp: Enable HTTP/3 by Default

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • Caddy

    Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

  • Oh hey HN. You can use the Caddy 2.6 beta today to try this out: https://github.com/caddyserver/caddy/releases/tag/v2.6.0-bet...

    Thanks to Marten Seemann for maintaining the quic-go library we use. (I still haven't heard whether Go will add HTTP/3 to the standard library.)

    Caddy 2.6 should be the first stable release of a general-purpose server to support and enable standardized HTTP/3 by default.

    PS. Caddy 2.6 will be our biggest release since 2.0. My draft release notes are about 23 KB. We're looking at huge performance improvements and powerful new features like events, virtual file systems, HTTP 103 Early Hints, and a lot of other enhancements I'm excited to show off on behalf of our collaborators!

  • quic-go

    A QUIC implementation in pure Go

  • See https://github.com/golang/go/issues/47840

    Yeah I agree this is a edge case, 99,99% of Caddy users don't push so much data ;)

    But Caddy can't be used as a big files download server for instance, unless sticking with HTTP/1.1 (that and sendfile + kTLS not been supported last time I checked?) (at least with a single http instance).

    Another issue for HTTP/3 is https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-B...

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • go

    The Go programming language

  • See https://github.com/golang/go/issues/47840

    Yeah I agree this is a edge case, 99,99% of Caddy users don't push so much data ;)

    But Caddy can't be used as a big files download server for instance, unless sticking with HTTP/1.1 (that and sendfile + kTLS not been supported last time I checked?) (at least with a single http instance).

    Another issue for HTTP/3 is https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-B...

  • cosmopolitan

    build-once run-anywhere c library

  • Redbean is a webserver. Go is not a webserver. Redbean cannot be faster than "Go". That's like saying that a car is faster than a spoon.

    I also haven't been able to find any in-depth independent benchmarks of Redbean. About the only thing I could find was someone struggling to reproduce the benchmark results.[0]

    Personally, I've also dealt with more than enough memory safety vulnerabilities caused by C (or C++) that would not have happened in any other language people are likely to choose... I have no desire to deploy anything like this. It's cool to see the hacks they've been able to do with Cosmopolitan to make cross platform binaries, but hacks like that are not what I want for anything other than educational purposes.

    [0]: https://github.com/jart/cosmopolitan/issues/72

  • caddy-docker-proxy

    Caddy as a reverse proxy for Docker

  • aioquic

    QUIC and HTTP/3 implementation in Python

  • httpx

    A next generation HTTP client for Python. 🦋

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • website

    The Caddy website (by caddyserver)

  • Yes, the docs have been updated at https://github.com/caddyserver/website but haven't been deployed yet. There is a new protocols option:

        protocols h1 h2

  • nginx-proxy

    Automated nginx proxy for Docker containers using docker-gen

  • There is also nginx_proxy, based on nginx.

    https://github.com/nginx-proxy/nginx-proxy

  • truststore

    Package to locally install development certificates

  • Yes they do, as long as you installed Caddy's root CA cert in the browser's trust store. Caddy will attempt to install it automatically with https://github.com/smallstep/truststore if possible (usually requires root) but if it fails you can try again with "sudo caddy trust". You might be using a client or trust store that isn't supported though, in which case you'll need to install the root cert manually.

  • FrameworkBenchmarks

    Source for the TechEmpower Framework Benchmarks project

  • > It's not really possible to compare the performance of webservers apples to apples.

    I'd say that it's possible, just not always easy, due to how many different configurations there can be for any given workload - the same servers might be used to achieve the approximately same configuration in different ways.

    However, if you took a common enough use case or workload, such as reverse proxy with SSL and gzip compression for $FOO resource types, serving files for $BAR application and proxying $BAZ API, then it should definitely be possible. You would just need some meaningful real-world test instead of a purely synthetic benchmark, otherwise you'll probably test something slightly different than what your server will be doing in practice.

    For example, some attempts have been made by OpenBenchmarking and at least give a vague idea of the performance of some servers:

    Nginx: https://openbenchmarking.org/test/pts/nginx

    Apache:https://openbenchmarking.org/test/pts/apache

    I'm mentioning this because while not everybody has the time to reproduce a given setup in any number of technologies, even similar enough tests in a controlled environment can produce meaningful information, at least to let you infer what orders of magnitude you're working with. For something concerning programming languages themselves and their frameworks, one just needs to look at what TechEmpower is trying to do: https://www.techempower.com/benchmarks/#section=data-r21

    > Really, you need to do your own benchmarking to determine which solution is best for you. But keep in mind that the web server is rarely the bottleneck, usually your app and database IO are where it takes the most time.

    This is well said, though.

    In general, I'm inclined to agree: most of the time, the performance of most web servers can be described as "good enough".

    The exception to this might be using your application servers (e.g. Tomcat) as a web server and running into situations where serving static assets (that might be baked into your application) would slow down because of API calls being slower and processing them digging into comparatively more conservative HTTP thread limits for the whole thing. Then again, personally I'd argue that you should have one of the popular web servers in front of your applications (and typically serving static assets) to act as an ingress in most cases, but I've seen some interesting things over the years.

  • rust-ape-example

    A simple example with Rust and Cosmopolitan Libc

  • Uhm you realize Google invented ASAN? It's how they hunt for memory bugs in software like Chrome. If you love Rust, then we're actively working to port Rust to Cosmopolitan. https://github.com/ahgamut/rust-ape-example Rust in practice has `unsafe` code which needs something like ASAN to make it safer. In order to do that, you need a C library that has first-class support for ASAN where it isn't just an afterthought. I believe that in the future, Cosmopolitan Libc is going to help Rust be even more safe going forward.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts