🐛 HTTP/2 tunnel concurrency silently falls to 250 streams with Go 1.27
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 85/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- go
- Ambito
- networking
Direzione di ricerca
Inizia da connection/connection.go#L25, dove il limite è impostato su math.MaxUint32, e ne vedi l'uso in connection/http2.go#L60-L62. Cambia la costante in math.MaxInt32. Aggiungi un test di regressione (ad esempio in connection/http2_test.go) che ispeziona il frame SETTINGS iniziale inviato al peer per confermare l'alto limite di stream. Fatto significa che il test passa e il frame SETTINGS mostra il valore previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
Cloudflared sets its HTTP/2 tunnel server's MaxConcurrentStreams to math.MaxUint32, but its current Go HTTP/2 implementation silently replaces that value with the default of 250.
This limits each HTTP/2 tunnel connection to 250 concurrent streams. Long-lived requests can fill those slots and reduce capacity for other traffic.
To Reproduce
- Use cloudflared 2026.10.3, which specifies Go 1.27.3 and golang.org/x/net v0.61.0.
- Run a tunnel with --protocol http2.
- Inspect the tunnel server's initial HTTP/2 SETTINGS frame. The source indicates that SETTINGS_MAX_CONCURRENT_STREAMS will be 250, although cloudflared configures math.MaxUint32.
This happened in our production environment and required us to release a custom build with http2legacy tag for now.
If it's an issue with Cloudflare Tunnel:
4. Tunnel ID : N/A
5. cloudflared config: N/A
Expected behavior
The HTTP/2 tunnel server should preserve the intended high stream limit instead of silently falling back to 250.
Using math.MaxInt32 would avoid the fallback in the current Go implementation.
Environment and versions
- Architecture: The code path affects both 64-bit and 32-bit builds.
- Version: cloudflared 2026.10.3
- Go version specified in go.mod: 1.27.3
- golang.org/x/net version: v0.61.0
Logs and errors
Verified locally on macOS arm64 using Go 1.27.3 and golang.org/x/net v0.61.0:
- math.MaxUint32 advertises 250 concurrent streams.
- math.MaxInt32 correctly advertises 2147483647.
- With the http2legacy build tag, math.MaxUint32 correctly advertises 4294967295.
The local reproducer uses the same http2.Server setting and ServeConn API as cloudflared.
Additional context
The relevant code is:
- Cloudflared sets the limit to math.MaxUint32.
- The HTTP/2 tunnel server uses that limit.
- The Go 1.27 adapter converts the value to int.
- Go replaces values above math.MaxInt32 with the default.
- That default is 250.
Please consider changing the configured limit to math.MaxInt32 and adding a regression test that checks the SETTINGS frame actually sent to the peer. Checking the server's configured field alone would miss this problem.
- Lingua principale
- Go
- Stelle
- 16.3k
- Fork
- 1.5k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di cloudflare/cloudflared
-
🐛 --output json writes invalid JSON lines when events are logged concurrentlyForse già presa @theolujay l’ha presa 18 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
cloudflare/cloudflared#1761 · 5 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
🐛 cfRay is missing from proxied request logs (newHTTPLogger discards the zerolog context)Forse già presa @pankajc46 l’ha presa 21 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
cloudflare/cloudflared#1756 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
🐛 After SIGTERM, `cloudflared tunnel run` uses 100% of one CPU core for the whole graceful-shutdown periodForse già presa @cyphercodes l’ha presa 21 giorni fa. ApertaPriority: Normal Type: Bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
cloudflare/cloudflared#1753 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
tunnel route ip show: --filter-network-is-subset-of sends the superset filterForse già presa @wangyusheng1985 l’ha presa 21 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 92/100
cloudflare/cloudflared#1750 ·
I maintainer di solito rispondono entro 1 giorno
-
🐛 QUIC Hijack() skips the status-written check that HTTP/2 enforcesForse già presa @dedsec-terminal l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
cloudflare/cloudflared#1748 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di cloudflare/cloudflared
Issue simili
-
agent-butler-finding bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
jordansmall/spindrift#6161 ·
I maintainer di solito rispondono entro 1 giorno
-
C-bug O-community X-blathers-untriaged
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
cockroachdb/cockroach#176210 · 1 commento ·
-
VLAgent `spec.k8sCollector.includePodLabels: false` has no effectForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
VictoriaMetrics/operator#2772 ·
I maintainer di solito rispondono entro 1 giorno
-
refactor Type/Improvement
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
OpenNSW/nsw-srilanka#969 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
Gaurav-Gosain/tuios#1316 ·
I maintainer di solito rispondono entro 1 giorno