Существует ли конкретное регулярное выражение 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 символов.

Другие вопросы по тегам