| 119 | const defaultRequestScheme = "http" |
| 120 | |
| 121 | func requestScheme(r *http.Request) string { |
| 122 | if r == nil { |
| 123 | return defaultRequestScheme |
| 124 | } |
| 125 | if forwarded := strings.TrimSpace(r.Header.Get("X-Forwarded-Proto")); forwarded != "" { |
| 126 | return strings.ToLower(forwarded) |
| 127 | } |
| 128 | if r.TLS != nil { |
| 129 | return "https" |
| 130 | } |
| 131 | if scheme := strings.TrimSpace(r.URL.Scheme); scheme != "" { |
| 132 | return strings.ToLower(scheme) |
| 133 | } |
| 134 | return defaultRequestScheme |
| 135 | } |
| 136 | |
| 137 | func canonicalOriginFromURL(parsed *url.URL) (canonicalOrigin, bool) { |
| 138 | scheme := strings.ToLower(strings.TrimSpace(parsed.Scheme)) |