GNOME Bugzilla – Bug 719640
implement HTTP 2.0
Last modified: 2018-09-21 16:18:04 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...
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.
*** Bug 786330 has been marked as a duplicate of this bug. ***
-- 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.