Sign in or sign up before continuing. Don't have an account yet? Register now to get started.
Register now

Missing websocket upgrade headers cause 500 response in workhorse

Summary

User with missing websocket websocket headers is causing a lot of 500 (internal server error) responses when it should be 400 (Bad Request)

Request Flow

  1. Client sends GET /-/cable (WebSocket headers stripped by proxy/VPN/firewall possibly)
  2. Workhorse checks "action_cable" route → no match (requires WebSocket headers)
  3. Workhorse falls through to "dash" route (catch-all for /-/*)
  4. Workhorse proxies to Rails as plain HTTP GET
  5. Rails/ActionCable receives plain GET, doesn't know how to handle it
  6. Returns 500 Internal Server Error

Impact

This is affecting GitLab Dedicated tenant and is causing an elevated Workhorse Error Ratio

Recommendation

Workhorse should check for requests to /-/cable without WebSocket headers and return 400 before proxying to Rails.

Verification

Edited Feb 03, 2026 by 🤖 GitLab Bot 🤖
Assignee Loading
Time tracking Loading