@@ -29,6 +29,10 @@ class RequestContextMiddleware(BaseHTTPMiddleware):
2929 async def dispatch (
3030 self , request : Request , call_next : RequestResponseEndpoint ,
3131 ) -> Response :
32+ # Skip WebSocket connections — BaseHTTPMiddleware breaks WS protocol
33+ if request .scope .get ("type" ) == "websocket" :
34+ return await call_next (request )
35+
3236 request_id = request .headers .get ("X-Request-ID" ) or uuid .uuid4 ().hex
3337 request .state .request_id = request_id
3438
@@ -53,6 +57,9 @@ class SecurityHeadersMiddleware(BaseHTTPMiddleware):
5357 async def dispatch (
5458 self , request : Request , call_next : RequestResponseEndpoint ,
5559 ) -> Response :
60+ if request .scope .get ("type" ) == "websocket" :
61+ return await call_next (request )
62+
5663 response = await call_next (request )
5764 response .headers ["X-Content-Type-Options" ] = "nosniff"
5865 response .headers ["X-Frame-Options" ] = "DENY"
@@ -70,6 +77,9 @@ class MaxBodySizeMiddleware(BaseHTTPMiddleware):
7077 async def dispatch (
7178 self , request : Request , call_next : RequestResponseEndpoint ,
7279 ) -> Response :
80+ if request .scope .get ("type" ) == "websocket" :
81+ return await call_next (request )
82+
7383 content_length = request .headers .get ("content-length" )
7484 if content_length and int (content_length ) > settings .max_request_body_bytes :
7585 from fastapi .responses import JSONResponse
@@ -92,6 +102,9 @@ class PrometheusMiddleware(BaseHTTPMiddleware):
92102 async def dispatch (
93103 self , request : Request , call_next : RequestResponseEndpoint ,
94104 ) -> Response :
105+ if request .scope .get ("type" ) == "websocket" :
106+ return await call_next (request )
107+
95108 from src .config .metrics import METRICS
96109
97110 # Normalise path to avoid high-cardinality (collapse IDs)
@@ -132,6 +145,9 @@ class AnalyticsMiddleware(BaseHTTPMiddleware):
132145 async def dispatch (
133146 self , request : Request , call_next : RequestResponseEndpoint ,
134147 ) -> Response :
148+ if request .scope .get ("type" ) == "websocket" :
149+ return await call_next (request )
150+
135151 from src .config .analytics import analytics
136152
137153 start = time .perf_counter ()
0 commit comments