unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Derek Upham <derek_upham@mailfence.com>
To: guile-devel@gnu.org
Subject: Re: [Patch] Support HTTP/2 in HTTP client
Date: Tue, 7 Apr 2020 16:39:38 +0200 (CEST)	[thread overview]
Message-ID: <877dyrqs0q.fsf@priss.frightenedpiglet.com> (raw)
In-Reply-To: <87sghongp7.fsf@priss.frightenedpiglet.com>

Okay, I figured it out.  In that particular chunk of code I was 
calling out to Curl to do the heavy lifting: “(run/port (curl 
--silent --head ,source-url))”.  Curl negotiates HTTP/2 and dumps 
the header information:

  HTTP/2 200 
  date: Tue, 07 Apr 2020 14:22:37 GMT
  content-type: audio/mpeg
  content-length: 31411830

The code then passed the response port to the existing 
“read-response” function in the web/response module, to turn this 
text into data objects.

That means this isn’t a “support HTTP/2 connections” change, it’s 
just a “support parsing HTTP/2 responses” change.

However, sometime during all of this I figured out how to get the 
system-installed extensions working with my personal build of 
Guile, so the TLS extension now works and I can cut Curl out of 
this code and just use “http-head”.  We can drop this patch.

Thanks,

Derek

Derek Upham <derek_upham@mailfence.com> writes:

> I made this particular tweak because Guile 2.2’s HTTP/1.1 client 
> requests were getting back an HTTP/2 response from a podcast 
> server, and choking.  (The use of Google’s URL was just an 
> example to show the format of the HTTP response header.)   Let’s 
> drop the 
> patch for now.  I’ll try disabling it locally and see whether I 
> can still reproduce it.  Given the amount of redirects that 
> media 
> website backends do, it’s possible that I’ll never come across 
> the problem again.
>
> Derek
>
> Tristan Colgate <tcolgate@gmail.com> writes:
>
>> http/2 is a substantially different protocol, it will take
>> considerable effort to support it, guile's client should only 
>> be
>> offering http/1.1 to the server.
>>
>> On Tue, 31 Mar 2020 at 15:49, Derek Upham 
>> <derek_upham@mailfence.com> wrote:
>>>
>>> Companies like Google now respond to HTTP requests with HTTP 
>>> 2.
>>> For example:
>>>
>>>   curl --silent --head https://www.google.com
>>>
>>> returns the first line
>>>
>>>   HTTP/2 200
>>>
>>> The Guile HTTP client code expects a “HTTP/x.y” structure, and
>>> treats this as an error.  This patch recognizes and handles
>>> “HTTP/2” on input and output.  HTTP version numbers don’t
>>> proliferate quickly, so the code uses a brute force approach 
>>> for
>>> now.
>>>
>>>
>>> Derek
>>>
>>> --
>>> Derek Upham
>>> derek_upham@mailfence.com


-- 
Derek Upham
derek_upham@mailfence.com



      parent reply	other threads:[~2020-04-07 14:39 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-31 14:42 [Patch] Support HTTP/2 in HTTP client Derek Upham
2020-03-31 15:00 ` Tristan Colgate
2020-04-01  1:21   ` Derek Upham
2020-04-01  7:24     ` Tristan Colgate
2020-04-07 14:39     ` Derek Upham [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877dyrqs0q.fsf@priss.frightenedpiglet.com \
    --to=derek_upham@mailfence.com \
    --cc=guile-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).