cloudflare / cloudflare/quiche

quiche seems unable to send requests with long urls

Open
#2,118 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
11.8k
Forks
1.1k
Avg merge
3d 7h
Merged PRs (30d)
16

Description

I added tests in curl using `GET` on long urls, running all HTTP versions and backends. The tests add `n * 'x'` as query string to a url with `n` in [1k, 16k, 32k, 54k]. (see https://github.com/curl/curl/pull/18129).

All QUIC backends except `quiche` work, giving the server 4xx response for the URL being too long. `quiche` is unable to start the stream. This happens in `curl_quiche.c:1025`:

```c
stream3_id = quiche_h3_send_request(ctx->h3c, ctx->qconn, nva, nheader,
stream->send_closed);
if(stream3_id < 0) {
if(QUICHE_H3_ERR_STREAM_BLOCKED == stream3_id) {
/* quiche seems to report this error if the connection window is
* exhausted. Which happens frequently and intermittent. */
CURL_TRC_CF(data, cf, "[%"FMT_PRIu64"] blocked", stream->id);
stream->quic_flow_blocked = TRUE;
result = CURLE_AGAIN;
goto out;
}
...
```

So, we are getting `QUICHE_H3_ERR_STREAM_BLOCKED` and interpret this as a temporary failure, as the description say "retry later". Are we wrong or is there an error code missing for a permanent failure here?

Note: this happens not only the first request of a connection, but also when sending a successful other request with response first.

Please advise.

Version used: quiche v0.24.4

Contributor guide

Open the contributing guide

Research direction

Start with curl_quiche.c:1025 and the long-URL GET tests described in curl PR 18129, using quiche v0.24.4 and the affected HTTP versions and backends. Trace the return value from quiche_h3_send_request and compare QUICHE_H3_ERR_STREAM_BLOCKED with the other backend results. Done means establishing whether this condition is temporary or permanent and documenting or handling it consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, rust
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.