Re: [RFC 2/2] Add Git-aware CGI for Git-aware smart HTTP transport
- From
- Rogan Dawes <lists@dawes.za.net>
- Date
- Aug 4, 2008, 15:45 UTC
- Message-ID
- <48972437.5050008@dawes.za.net>
- In-Reply-To
- <20080804144824.GB27666@spearce.org>
Shawn O. Pearce wrote:
Show 23 quoted lines
> Rogan Dawes <lists@dawes.za.net> wrote: >> Shawn O. Pearce wrote: >>> Smart Server Detection >>> ---------------------- >>> >>> To detect a smart (Git-aware) server a client sends an >>> empty POST request to info/refs; [...] >>> >>> C: POST /repository.git/info/refs HTTP/1.0 >>> C: Content-Length: 0 >> I don't understand why you would want to keep the commands in the URL >> when you are doing a POST? > > Well, as Dscho pointed out this partly has to do with caching and > the transparent dumb server functionality. By using the command in > the URL, and having the command match that of the dumb server file, > its easier to emulate a dumb server and also to permit caching. > > Currently git-http-backend requests no caching for info/refs, but > I could see us tweaking that to permit several minutes of caching, > especially on big public sites like kernel.org. Having info/refs > report stale by 5 minutes is not an issue when writes to there > already have a lag due to the master-slave mirroring system in use.
Fair enough, but what about the quote from RFC2616 that I posted in rebuttal to Dscho?
> 13.10 Invalidation After Updates or Deletions > > ... > > Some HTTP methods MUST cause a cache to invalidate an entity. This is > either the entity referred to by the Request-URI, or by the Location > or Content-Location headers (if present). These methods are: > > - PUT > - DELETE > - POST
This doesn't seem negotiable to me.
For those resources that are expected to be cacheable, the request should be made using a GET.
> Because git-http-backend emulates a dumb server there is a command > dispatch table based upon the URL submitted. Thus we already have > the command dispatch behavior implemented in the URL and doing it > in the POST body would only complicate the code further.
Not by a huge amount, surely?
if (method == "GET") command = ... else if (method == "POST") command = ... dispatch(command);
Rogan