Skip to content

quiche seems unable to send requests with long urls #2118

@icing

Description

@icing

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 curl/curl#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:

  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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions