1
+ """URL utilities for MCP Gateway.
2
+
3
+ Provides functions for handling URL protocol detection and manipulation,
4
+ especially for proxy environments with forwarded headers.
5
+ """
6
+
1
7
# Standard
2
8
from urllib .parse import urlparse , urlunparse
3
9
6
12
7
13
8
14
def get_protocol_from_request (request : Request ) -> str :
9
- """
10
- Return "https" or "http" based on:
11
- 1) X-Forwarded-Proto (if set by a proxy)
12
- 2) request.url.scheme (e.g. when Gunicorn/Uvicorn is terminating TLS)
15
+ """Get protocol from request headers or URL scheme.
16
+
17
+ Checks X-Forwarded-Proto header first, then falls back to request.url.scheme.
13
18
14
19
Args:
15
- request (Request) : The FastAPI request object.
20
+ request: The FastAPI request object
16
21
17
22
Returns:
18
- str: The protocol used for the request, either "http" or "https".
23
+ Protocol string: "http" or "https"
19
24
"""
20
25
forwarded = request .headers .get ("x-forwarded-proto" )
21
26
if forwarded :
@@ -26,14 +31,13 @@ def get_protocol_from_request(request: Request) -> str:
26
31
27
32
28
33
def update_url_protocol (request : Request ) -> str :
29
- """
30
- Update the base URL protocol based on the request's scheme or forwarded headers.
34
+ """Update base URL protocol based on request headers.
31
35
32
36
Args:
33
- request (Request) : The FastAPI request object.
37
+ request: The FastAPI request object
34
38
35
39
Returns:
36
- str: The base URL with the correct protocol.
40
+ Base URL with correct protocol
37
41
"""
38
42
parsed = urlparse (str (request .base_url ))
39
43
proto = get_protocol_from_request (request )
0 commit comments