Get request scheme taking into account the forwarded headers.
(request: web.Request)
| 305 | |
| 306 | |
| 307 | def _request_scheme(request: web.Request): |
| 308 | """ |
| 309 | Get request scheme taking into account the forwarded headers. |
| 310 | """ |
| 311 | scheme_headers = [ |
| 312 | "X-Forwarded-Proto", |
| 313 | "X-Scheme", |
| 314 | "X-Forwarded-Scheme", |
| 315 | ] |
| 316 | request_schemes = [ |
| 317 | "http", |
| 318 | "https", |
| 319 | ] |
| 320 | for header in scheme_headers: |
| 321 | header_value = request.headers.get(header) |
| 322 | if header_value is None: |
| 323 | continue |
| 324 | header_value = header_value.lower() |
| 325 | if header_value in request_schemes: |
| 326 | return header_value |
| 327 | |
| 328 | # fallback, doesn't work for forwarded scenarios |
| 329 | return request.scheme |
| 330 | |
| 331 | |
| 332 | class PathwayServer(ABC): |
no test coverage detected