curl / Mailing Lists / curl-library / Single Mail


Re: HTTP/2 with curl_easy

From: Daniel Stenberg via curl-library <>
Date: Mon, 4 Mar 2019 22:06:08 +0100 (CET)

On Mon, 4 Mar 2019, Magdy, Marco via curl-library wrote:

> First of all, the AWS SDK uses libcurl's easy interface for HTTP/1.1 while
> this is less than ideal for HTTP/2, I intend on improving that in the
> future. In the meantime, I'm wondering if HTTP/2 works with the easy
> interface.

It does, yes. It just won't multiplex anything since the API is synchronous.

> The issues I'm seeing is that the function set via CURLOPT_READFUNCTION is
> never invoked to send the body when connecting over H2. Instead, I receive a
> 200 OK followed by an error from the server because the client sent
> END_STREAM flag right after it sent the headers.

That sounds like the server objects to something or similar.

You can in fact easily try out HTTP/2 POST with curl against practically any
HTTP/2 server like this:

  $ curl -d moo https://[server] --http2

The --http2 option isn't necessary in modern curl versions. I tried this just
now against my own server and even I couldn't spot any problems.

> $ curl --version
> curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0

A quick browsing through the changelog from after that release reveals that we
have fixed numerous bugs in the HTTP/2 side of things since April 2017 when
7.54.0 was released. However, I can't recognize your symptoms to be describing
any previous bug... I would still advice you to test a modern version first
just to make sure and to avoid spending a lot of time on a problem that might
already be fixed.

Can you reproduce the problem against a public end-point so that someone else
can take a look?

Received on 2019-03-04