After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 719640 - implement HTTP 2.0
implement HTTP 2.0
Status: RESOLVED OBSOLETE
Product: libsoup
Classification: Core
Component: HTTP Transport
unspecified
Other Linux
: Normal normal
: ---
Assigned To: libsoup-maint@gnome.bugs
libsoup-maint@gnome.bugs
: 786330 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2013-12-01 13:55 UTC by Dan Winship
Modified: 2018-09-21 16:18 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Dan Winship 2013-12-01 13:55:16 UTC
libsoup should support HTTP 2.0. I haven't looked into this much yet, so this bug is mostly just a placeholder for the moment...
Comment 1 Dan Winship 2015-02-26 16:23:23 UTC
Since HTTP/2 is about to be published, I should braindump the current status of HTTP/2 support in libsoup. (Short answer: just slightly above non-existent.)

There are two big pieces:

    - Connection management

      SoupSession needs to be modified to be able to track both HTTP/1
      hosts/connections, and HTTP/2 ones (which work differently, since
      you only have one actual TCP connection to any given server in
      HTTP/2).

      I started working on this at the 2013 WebKitGTK+ Hackfest. At the
      time, it seemed to me that this should involve having two subclasses
      of SoupSessionHost; one for HTTP/1, and one for HTTP/2, and they
      could implement different connection management schemes internally.
      A small start at implementing this is on the wip/http2-a branch in git.
      I remember that I ran into problems with this approach later, but I
      don't remember the details now, and don't still have any of the
      further code I'd written.


    - I/O

      The I/O path needs to be abstracted to handle both HTTP/1 and HTTP/2.
      I started working on that at the 2014 WebKitGTK+ Hackfest, and the
      results of that can be found in wip/http2-b (which is entirely
      orthogonal to wip/http2-a).

      The branch adds a SoupHTTPChannel type, which encapsulates the I/O
      for a single HTTP request and response, and implements that for
      HTTP/1. There is also the start of an HTTP/2 implementation (based
      on nghttp2 [http://nghttp2.org]). (Note that it was started as a
      copy+paste of the HTTP/1 implementation, and it still has a bunch of
      irrelevant code in it in the places I hadn't gotten to yet. Also,
      different parts of it represent different stages of my thought
      processes, and so do things in different ways, or refer to APIs in
      other parts that don't exist, etc.)

      The trickiest part here is that a user may have a mix of synchronous
      and asynchronous requests outstanding to any host. This means that
      all HTTP/2 I/O has to happen in dedicated threads, which will take
      care of muxing/demuxing the individual streams of each connection
      and transferring data to and from the user's threads. (This is
      essentially the same thing that gdbus does, for the same reason.) I
      had been thinking one thread per HTTP/2 connection, but it could
      actually be a single HTTP/2 thread per SoupSession just as easily.
      (mumble mumble performance issues)

I am not currently working on this, and am not likely to pick it up again any time soon, but if other people want to hack on it I can try to provide guidance.
Comment 2 Michael Catanzaro 2017-08-15 16:08:17 UTC
*** Bug 786330 has been marked as a duplicate of this bug. ***
Comment 3 GNOME Infrastructure Team 2018-09-21 16:18:04 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to GNOME's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.gnome.org/GNOME/libsoup/issues/65.