git客户端运行的HTTP URI是否有特定的正则表达式?

时间:2019-02-15 11:39:52

标签: git reverse-proxy git-http-backend

出于身份验证目的,我正在尝试配置Apache反向代理以匹配git客户端使用HTTP后端访问的URI。¹为此,我想在代理上的URI上匹配HTTP请求,并以不同的方式对待它们。后一部分没问题,但是我很难找到一个合适的URI模式/列表来匹配那些请求。

到目前为止,我发现的是:

  • 在日志记录服务器端(访问日志)和客户端(GIT_CURL_VERBOSE=1)上进行了实验。到目前为止观察到:
    • <base-url>/info/refs?service=git-upload-pack上获取
      (ls远程或初步获取/克隆)
    • <base-url>/info/refs?service=git-receive-pack上获取
      (对git push的初步了解)
    • 发布到<base-url>/git-upload-pack
      (git fetch)
    • POST到<base-url>/git-receive-pack
      (git push)
  • Documentation in the Git book on transfer protocols,但这在设计上似乎不完整:

      

    本节包含传输协议的非常基本的概述。该协议包括许多其他功能,例如multi_ack或边带功能,但涵盖这些功能超出了本书的范围。

  • the manpage of git-http-backend中的建议的Apache配置。

    • 假定您在单独的前缀上​​提供git存储库,但情况并非总是如此(请参阅我的脚注)。
    • RewriteCond %{QUERY_STRING} service=git-receive-pack这样的部分假设,在同一个VirtualHost上没有其他服务,因为这样做会破坏非Git资源,除非我添加了额外的要求,即没有查询字符串的URI匹配〜 /info/refs$
    • 虽然它可能仍是最新的,但似乎有些过时了,因为它仍显示带有授权的Apache 2.2配置示例。这使我想知道此更新是否适当并适合可靠的来源。

仅列出上述模式也让我担心的是:

  • 也许某些客户端的操作有所不同,例如是“哑协议”还是“智能协议v2”?
  • Git协议2可能会改变一切吗?
  • 我真的找不到协议的 HTTP部分的规范。我可以在协议的Git级别上找到很多东西,但是从反向代理的角度来看,这并不是我感兴趣的。
  • 结果,我可能会破坏用户的工作,由于代理上的URI晦涩难懂,因此很难调试。

因此,理想情况下,我想指出一些文档/代码,其中显示了git http客户端 可以对其进行操作的URI的完整概述。只要它是权威的,它可能就是一个简单的正则表达式-无论如何我最终还是要寻找的。


¹我正在尝试使用Apache作为反向代理身份验证来执行SSO登录,并通过HTTPS与常规网页对Git进行不同类型的身份验证。该应用程序Gerrit Code Review在具有SSO身份验证并启用了auth.trustContainerAuth的公共URL前缀上同时提供了页面和Git存储库,因此我在例如^/git/.*的联机帮助页上建议使用git-http-backend

1 个答案:

答案 0 :(得分:1)

智能和哑HTTP的路径列表在the source code中。请注意,它不包含查询参数或内容类型。

请注意,目前正在进行将SHA-256支持添加到Git的工作,因此,现在接受40个字符的十六进制字符串的任何事物将来也将处理64个字符的十六进制字符串。