Re: Git-aware HTTP transport
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Aug 26, 2008, 16:14 UTC
- Message-ID
- <20080826161425.GG26523@spearce.org>
- In-Reply-To
- <20080826145857.GF26523@spearce.org>
"Shawn O. Pearce" <spearce@spearce.org> wrote:
Show 7 quoted lines
> "H. Peter Anvin" <hpa@zytor.com> wrote: > > > > I actually suggest embedding the forwarding URL into an ordinary > > payload. Instead of a HEAD request here, then do a GET (or, even > > better, POST) and get the redirected URL in return. > > Hmm. I'm actually thinking the exact opposite here.
Here's the delta from the last draft I emailed. Its basically just about this redirect stuff.
diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt index 99d7623..a3f7379 100644 --- a/Documentation/technical/http-protocol.txt +++ b/Documentation/technical/http-protocol.txt @@ -43,14 +43,40 @@ All requests/responses use "application/x-git" as the content type. Action specific subtypes are specified by the parameter "service", e.g. "application/x-git; service=upload-pack". +Redirects +--------- + +If a POST request results in an HTTP 302 or 303 redirect response +clients should retry the request by updating the URL and POSTing +the request to the new location. + +If the new request is successful clients should trim off the +trailing "/backend.git/$service" portion of the new loaction +and use the remainder as the base URL for future requests in +the same transaction. + +This redirection permits Apache's mod_rewrite (and many other +servers) to implement a form of round-robin load balancing by +redirecting all requests to a generic host to a specific host. + Detecting Smart Servers ----------------------- HTTP clients can detect a smart Git-aware server by sending a request to service "show-ref". -A Git-aware server will respond with a valid response (see below). -A dumb server should respond with an error message. +A Git-aware server will respond with a valid response. Clients +must check the following properties to prevent being fooled by +misconfigured servers: + + * HTTP status code is 200. + * Content-Type is "application/x-git; service=show-ref" + * The body can be parsed without errors. The length of + each pkt-line must be 4 valid hex digits. + +A dumb server will respond with a non-200 HTTP status code. +A misconfigured server may respond with a normal 200 status +code, but an incorrect content type. Service show-ref ----------------
-- Shawn.