|
# retoor <retoor@molodetz.nl>
|
|
|
|
from __future__ import annotations
|
|
|
|
from starlette.requests import Request
|
|
|
|
HOP_HEADERS = frozenset(
|
|
{
|
|
"connection",
|
|
"keep-alive",
|
|
"proxy-authenticate",
|
|
"proxy-authorization",
|
|
"te",
|
|
"trailers",
|
|
"transfer-encoding",
|
|
"upgrade",
|
|
"host",
|
|
"content-length",
|
|
"content-encoding",
|
|
}
|
|
)
|
|
|
|
|
|
def forward_headers(request: Request, prefix: str) -> dict[str, str]:
|
|
headers = {
|
|
k: v for k, v in request.headers.items() if k.lower() not in HOP_HEADERS
|
|
}
|
|
headers["X-Forwarded-Prefix"] = prefix
|
|
headers["X-Script-Name"] = prefix
|
|
headers["X-Forwarded-Host"] = request.headers.get(
|
|
"host", request.url.hostname or ""
|
|
)
|
|
headers["X-Forwarded-Proto"] = request.headers.get(
|
|
"x-forwarded-proto", request.url.scheme
|
|
)
|
|
headers["Accept-Encoding"] = "identity"
|
|
return headers |