Beim Upgrade einer selbstgehosteten GitLab-Instanz von 18.1 auf 18.6 kann es zu unerwarteten HTTP-400-Fehlern kommen, etwa bei der Nutzung von glab mr create. Besonders betroffen sind Setups, bei denen GitLab hinter einem Reverse-Proxy wie Traefik betrieben wird.
Das Symptom
API-Aufrufe wie:
GET /api/v4/projects/group%2Fprojektname
schlagen mit 400 Bad Request fehl – obwohl sie in älteren GitLab-Versionen problemlos funktionierten.
Die Ursache
Zwei Änderungen treffen hier aufeinander:
- GitLab API
- Viele API-Endpoints (u. a. Projects, Merge Requests, Resource Groups) akzeptieren Projekt-IDs entweder als numerische ID oder als URL-kodierten Projektpfad.
- Moderne GitLab-Versionen sind strikter und erwarten korrekt URL-kodierte Pfade (
%2Fstatt/).
- Traefik (v3.6.3+)
- Aus Sicherheitsgründen blockiert Traefik standardmäßig kodierte Sonderzeichen im URL-Pfad, darunter
%2F. - Solche Requests werden direkt von Traefik mit HTTP 400 abgelehnt und erreichen GitLab gar nicht.
- Aus Sicherheitsgründen blockiert Traefik standardmäßig kodierte Sonderzeichen im URL-Pfad, darunter
Das Ergebnis: GitLab „funktioniert nicht mehr“, obwohl in Wirklichkeit der Proxy die Anfrage verwirft.
Die Lösung
In Traefik muss das Zulassen kodierter Slashes global auf EntryPoint-Ebene aktiviert werden:
entryPoints:
https:
address: ":443"
http:
encodedCharacters:
allowEncodedSlash: true
Nach einem Neustart von Traefik werden API-Requests mit %2F korrekt weitergeleitet, und Tools wie glab funktionieren wieder wie erwartet.
Fazit
Der Fehler liegt weder bei glab noch bei GitLab selbst, sondern in einer Sicherheitsverschärfung von Traefik, die mit den strengeren API-Anforderungen neuer GitLab-Versionen kollidiert. Wer GitLab hinter Traefik betreibt, sollte diese Einstellung prüfen – insbesondere nach Updates.
Kurz gesagt: GitLab wollte korrekt kodierte URLs, Traefik hat sie blockiert.