Существует ли конкретное регулярное выражение HTTP URI, на котором работает git-клиент?
Я пытаюсь настроить свой обратный прокси-сервер Apache для соответствия URI, к которым обращаются клиенты git, использующие HTTP-бэкенд, для целей аутентификации¹. Для этого я хотел бы сопоставить HTTP-запросы на URI на прокси и обрабатывать их по-разному. В последней части проблем нет, но у меня проблемы с поиском подходящего шаблона / списка URI, соответствующих этим запросам.
Что я нашел до сих пор:
- Экспериментировал с регистрацией на стороне сервера (журналы доступа) и на стороне клиента (
GIT_CURL_VERBOSE=1
). Наблюдается до сих пор:- Попадает на
<base-url>/info/refs?service=git-upload-pack
(ls-remote или предварительный выбор / клон) - Попадает на
<base-url>/info/refs?service=git-receive-pack
(предварительно, чтобы git push) - ПОСТЫ к
<base-url>/git-upload-pack
(мерзкий выбор) - ПОСТЫ к
<base-url>/git-receive-pack
(Git Push)
- Попадает на
Документация в книге Git по протоколам передачи, но она кажется неполной по замыслу:
Этот раздел содержит очень простой обзор протоколов передачи. Протокол включает в себя множество других функций, таких как функции multi_ack или side-band, но их рассмотрение выходит за рамки этой книги.
Предлагаемая конфигурация Apache на странице руководства git-http-backend.
- Предполагается, что вы используете git-репозитории с отдельным префиксом, что не всегда так (см. Мою сноску).
- Часть как
RewriteCond %{QUERY_STRING} service=git-receive-pack
делает предположение, что ничто другое не обслуживает тот же VirtualHost, потому что это нарушит не-Git ресурсы с этим, если я не добавлю дополнительное требование, чтобы URI без строки запроса соответствовал ~/info/refs$
, - Несмотря на то, что он все еще актуален, он кажется немного устаревшим, поскольку он все еще показывает примеры конфигурации Apache 2.2 с авторизацией. Это заставляет меня задуматься, обновляется ли это соответствующим образом и подходит ли оно для достоверного источника.
То, что также беспокоит меня просто перечислением вышеупомянутых образцов:
- Возможно, некоторые клиенты работают по-разному, например, "тупой протокол" или "умный протокол v2"?
- Git protocol 2 может что-то изменить или нет?
- Я не могу найти спецификацию HTTP-частей протокола. Я могу найти многое на уровне Git протокола, но это не то, что меня интересует с точки зрения обратного прокси.
- В результате я мог бы сломать материал для пользователей, который трудно отладить из-за неясного соответствия URI на прокси...
Итак, в идеале я хотел бы указать на некоторую часть документации / кода, которая показывает полный обзор, над которыми могут работать URI git http клиенты. Это может быть простое регулярное выражение - в конце концов, это то, что я ищу в конце - до тех пор, пока оно является авторским.
¹ Я пытаюсь выполнить SSO-вход с использованием Apache в качестве аутентификации обратного прокси-сервера, с другим типом аутентификации для Git через HTTPS по сравнению с обычными веб-страницами. Приложение Gerrit Code Review обслуживает как страницы, так и репозитории Git через общий префикс URL с аутентификацией SSO и auth.trustContainerAuth
включен, поэтому я не могу действительно соответствовать, например, ^/git/.*
как предложено на странице руководства git-http-backend
,
1 ответ
Список путей для умного и тупого HTTP приведен в исходном коде. Обратите внимание, что он не включает параметры запроса или типы содержимого.
Обратите внимание, что продолжается работа по добавлению поддержки SHA-256 в Git, и, следовательно, все, что теперь принимает шестнадцатеричную строку из 40 символов, будет также обрабатывать шестнадцатеричную строку из 64 символов.