-
-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Existing HTTP/3 connections become unusable during config update #6917
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Thanks for the instructions; I will give it a try soon... in the meantime, does this only happen with Chrome? (What about curl with http/3, or Firefox?) |
I just tried Firefox and the behaviour there is a bit better. When the config update goes through, it seems to hesitate for a moment and then fallback to HTTP/2 transparently. When I check the requests in the Network tab, I can see that they are HTTP/3 before the config change, and then HTTP/2 after the config change. I'm guessing the hesitation is because Firefox is setting up a new connection. I haven't observed any issues with Client versions (desktop):
|
Chrome stable http3 support is spotty.. I have achieved better results with chrome-dev where it seems to be more consistent/stable. |
We're seeing this issue as well with Chrome and also Arc (which is Chromium-based IIRC). We'll just turn off http 3 in caddy for now -- is that the recommended workaround? |
That should work around it by avoiding the glitchy code paths, yeah. I haven't had a chance yet to dig into this, but it does seem odd that it's mainly Chrome-only. |
We also found that changing "experimental quic protocol" from "default" to "disabled" in Chrome fixes the problem btw. (It surprised me that it was enabled by default in the release version of Chrome, despite being experimental.) |
When a new config is pushed to caddy using
POST http://localhost:2019
, clients with existing HTTP/3 connections to the caddy server lose the ability to connect for a short period of time, causing active users to experience downtime.I was able to reproduce this with a clean install on a new EC2 instance:
config.json
file on the server (replaceTESTDOMAIN
with a domain you control):A
record forTESTDOMAIN
that matches the public IPv4 address of the EC2 instance.curl -d @config.json -H 'content-type: application/json' http://localhost:2019/load
on the serverhttps://TESTDOMAIN
in Google Chrome (tested with both Chrome for Android and desktop).config.json
, changing "hello world" to "hello world 2".sleep 3 && curl -d @config.json -H 'content-type: application/json' http://localhost:2019/load
on the serversleep 3
finishes, at which point the page will hang and refuse to load.https://TESTDOMAIN
from a different browser and observe that the page does in fact load.Blocking UDP port 443 seems to fix this problem.
Log output during config change:
The text was updated successfully, but these errors were encountered: