How to enable 0-RTT

1. The problem I’m having:

I’m trying to see how I can enable 0-RTT.

I saw that this release mentions it and I should be able to enable it somehow but I haven’t been able to get it to work Release v0.32.0 · quic-go/quic-go · GitHub

2. Error messages and/or full log output:


3. Caddy version:


4. How I installed and ran Caddy:

apt package

a. System environment:

Ubuntu server, running as systemd service

b. Command:

c. Service/unit/compose file:

d. My complete Caddy config:

Not relevant to the question

5. Links to relevant resources:

In Caddy we enable 0-RTT without a configuration option.

All the resources I could find point to the opposite. Including the independent test by SSLlabs SSL Server Test (Powered by Qualys SSL Labs)

I don’t know what SSL Test does, but http3check confirms 0-RTT test is successful for my own blog, which is served by Caddy.


I don’t think that test can be trusted.

Using the sslyze binary I did the following tests on and my domain hosted with caddy.

Test for is successful. As for my domain (using caddy) it fails.

What is your domain? We could help you debug it, but you left the Help template mostly empty so we are unable to assist further other than saying “it works for us” :frowning:

Hi there!

The domain isn’t relevant in my case because I’ve tried it on multiple different installs and multiple different domain names using caddy.

My domain is

I’ve tested etc with the sslyze tool and they come back positive. But not for caddy-based websites.

Why do you think that test can’t be trusted? It was recently updated and works with all the latest HTTP/3 deployments. The sslyze tool, on the other hand, hasn’t updated its early data plugin in about 3 years (other than a couple irrelevant changes) but the QUIC protocol drafts have changed a lot in those 3 years. I suspect it’s using an older version of the draft.

HTTP/3 check shows a success for your domain:

Zero Round Trip Time Resumption (0-RTT)

The QUIC handshake for this connection was completed without any additional round-trips.


Upon further investigation, it appears sslyze doesn’t even support QUIC:

I think sslyze is the tool that can’t be trusted for this. (And that’s saying something, since HTTP/3 Check is developed by a competing web server company.)

If you want to test HTTP/3 yourself, Marten Seeman, the developer of our QUIC library, suggests:

If you actually want to check for 0-RTT support, have a look what Chrome does, and record a qlog to see if 0-RTT packets are sent.


Thank you for the great insight!
The reason I got suspicious was that I found threads on this forum and Github about “not enabling 0-RTT by default” because it could be a security risk.

Now another question would be, how would one go about disabling it if their website has a high-security application? Just to make sure :slight_smile:

Edit: I had 2 tests that said it didn’t support it, and 1 that did. So I wasn’t sure what to think of it.


Might be wrong but I don’t think you can without disabling HTTP/3 entirely using Global options (Caddyfile) — Caddy Documentation

Though, the “0-RTT security concern/risk/vulnerability” stuff has been brought up pretty frequently with Caddy, and it all really roots down to concerns of replay attacks, but that’s something you should be fixing at the application level instead of just disabling 0-RTT at the web server level. Browsers have already been “replaying” POST requests without changing the contents for a long time now with the “resend form on reload” stuff.


Know if there was a reasonable amount of risk, we’d make it opt-in. Modern, secure defaults are key to Caddy.

1 Like

Yeah, and IIRC the 0RTT is or should only be used for GET requests, which is safe.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.