Skip to contentSkip to conversation

protocol-v2 doc: put HTTP headers after request

PATCH In review Josh Steadmon 2 participants 3 messages Jun 22, 2018 Documentation

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 protocol-v2 doc: put HTTP headers after request

HTTP servers return 400 if you send headers before the GET request.

---
 Documentation/technical/protocol-v2.txt | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
Documentation/technical/protocol-v2.txt +1 -2
index 49bda76d2..f58f24b1e 100644
@@ -64,9 +64,8 @@ When using the http:// or https:// transport a client makes a "smart"
 info/refs request as described in `http-protocol.txt` and requests that
 v2 be used by supplying "version=2" in the `Git-Protocol` header.
 
-   C: Git-Protocol: version=2
-   C:
    C: GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.0
+   C: Git-Protocol: version=2
 
 A v2 server would reply:
 
Signature · 1 line
2.18.0.rc2.346.g013aa6912e-goog
Reviewed-by on v1 1/1
#1 lore raw
Quoted 6 lines · Josh Steadmon

HTTP servers return 400 if you send headers before the GET request.

---
 Documentation/technical/protocol-v2.txt | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Thanks. Congrats on your first patch! ;-)

Tested using

openssl s_client -connect github.com:443

with input

GET /git/git/info/refs?service=git-upload-pack HTTP/1.0
Host: github.com
Git-Protocol: version=2

which produces a 404 instead of the 400 that putting Git-Protocol in front would produce.

#2 lore raw
Quoted 3 lines · Jonathan Nieder
Quoted 1 line · Josh Steadmon

HTTP servers return 400 if you send headers before the GET request.

[...]

Quoted 4 lines

Tested using

openssl s_client -connect github.com:443

Quoted 8 lines

with input

GET /git/git/info/refs?service=git-upload-pack HTTP/1.0
Host: github.com
Git-Protocol: version=2

which produces a 404 instead of the 400 that putting Git-Protocol in front would produce.

I figured out how to produce a 200:

	printf '%s\r\n' \
		'GET /git/git/info/refs?service=git-upload-pack HTTP/1.0' \
		'Host: github.com' \
		'User-Agent: git/jrn-at-keyboard' \
		'Git-Protocol: version=2' '' |
	openssl s_client -connect github.com:443 -quiet

The critical part is the User-Agent starting with git/.

So we should probably update Documentation/technical/http-protocol.txt to indicate that clients MUST have a user-agent string starting with Git/ to allow the kind of request routing that github does.

That's all orthogonal to this patch. The patch still looks good to me.

Sincerely,
Jonathan