git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] remote-curl.c: handle v1 when check_smart_http

From
Jeff King <peff@peff.net>
Date
Mar 26, 2021, 06:55 UTC
Message-ID
<YF2FdzuQJV5Zb/y1@coredump.intra.peff.net>
In-Reply-To
<YF1+AjgfA6gnAGga@coredump.intra.peff.net>
On Fri, Mar 26, 2021 at 02:24:03AM -0400, Jeff King wrote:
Show 34 quoted lines
> One curiosity is that for v2, the response from github.com does include
> the "service" line. So it follows the same path as v1, and never hits
> the "version 2" line check here. But http-backend omits the "service"
> line, due to 237ffedd46 (http: eliminate "# service" line when using
> protocol v2, 2018-03-15).
> 
> So it's interesting that GitHub behaves differently than http-backend
> here. It's not surprising, since the HTTP framing is all done by a
> custom server there, which implemented off the spec.  What _is_
> surprising is that the client seems perfectly happy to see either form,
> and nobody has noticed the difference until just now.
> 
> IMHO the spec is very unclear here; it says "client makes a smart
> info/refs request as described in http-protocol.txt", but doesn't call
> out the difference in the response. It's only implied by the example:
> 
>   A v2 server would reply:
> 
>      S: 200 OK
>      S: <Some headers>
>      S: ...
>      S:
>      S: 000eversion 2\n
>      S: <capability-advertisement>
> 
> where it is unclear whether the blank line is separating HTTP headers
> from the body (and thus "..." is some headers), or if it is separating
> the "# service" line and matching flush from the rest of the response
> body.
> 
> I note that gitlab.com also returns the "service" line for v2 (I don't
> know anything about their implementation, but I would not be at all
> surprised if they also use a custom HTTP endpoint; apache+http-backend
> is not very flexible or scalable).
I wondered two things:
  - how other servers behave; jgit is the obvious other one to check. It
    seems to match http-backend in omitting the "service" line. I also
    checked its v1 behavior. It seems to ignore it totally and behave
    like v0 (which again, is OK, since it's not useful). This was based
    on testing against https://android.googlesource.com. In v0, it
    claims agent=JGit/4-google, though curiously in v2 it does not
    advertise an agent at all. :)
  - whether other v2 clients are equally forgiving of either format.
    Again, jgit is probably the most interesting here (libgit2 does not
    speak v2 at all yet). And indeed, it seems to be happy with either
    format (which is not surprising, given how common both types of
    server are).
-Peff
Previous: Jeff KingNext: lilinchao@oschina.cn
Message 5 of 8 in “remote-curl.c: handle v1 when check_smart_http”
  1. 2/2 remote-curl.c: handle v1 when check_smart_httplilinchao@oschina.cn, Mar 24, 2021
  2. Junio C HamanoMar 24, 2021
  3. Junio C HamanoMar 24, 2021
  4. Jeff KingMar 26, 2021
  5. Jeff KingMar 26, 2021
  6. lilinchao@oschina.cnMar 25, 2021
  7. lilinchao@oschina.cnMar 29, 2021
  8. Jeff KingMar 29, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.