40

When I do a curl -v to some docker container that I created, I get:

* Mark bundle as not supporting multiuse

What does it mean? Where is it documented?

2 Answers2

29

From https://github.com/curl/curl/blob/curl-7_82_0/lib/http.c#L4226 :

if(conn->httpversion < 20) {
   conn->bundle->multiuse = BUNDLE_NO_MULTIUSE;
   infof(data, "Mark bundle as not supporting multiuse\n");
}

It is a feature of HTTP/2. See, e.g., https://web.archive.org/web/20200328114206/https://www.cloudflare.com/website-optimization/http2/what-is-http2/

Paul
  • 3,278
Mark Wagner
  • 18,428
7

If I understand correctly, multiuse == multiplexing? If so, then this explanation is fine.

Multiplexing is perhaps the most significant benefit of HTTP/2. HTTP/1.1 requires each request to use its own TCP connection. Multiplexing, in contrast, allows a browser to include multiple requests in a single TCP connection.

Multiplexing Diagram 1

The problem is, a browser can only have a limited number of TCP connections open at any given time. For HTTP/1.1, this means a browser can only load a single resource at a time—every asset in a web page is sent back to the browser sequentially. Multiplexing allows a browser to request all these assets in parallel. This results in a dramatic performance gain.

Multiplexing Diagram 2

HTTP/1.1 is sort of like buying a single item at a grocery store, taking it back home, going back to the store for the next item you need, and repeating until your pantry is fully stocked. Multiplexing gives you a shopping cart so you can pick up everything you need in one trip.

David
  • 103
del13r
  • 79