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
- Client sends
GET /-/cable(WebSocket headers stripped by proxy/VPN/firewall possibly) - Workhorse checks "action_cable" route → no match (requires WebSocket headers)
- Workhorse falls through to "dash" route (catch-all for
/-/*) - Workhorse proxies to Rails as plain HTTP GET
- Rails/ActionCable receives plain GET, doesn't know how to handle it
- 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 by 🤖 GitLab Bot 🤖