@@ -85,16 +85,31 @@ export function getRequestHeader(
85
85
86
86
export const getHeader = getRequestHeader ;
87
87
88
- export function getRequestHost ( event : H3Event ) {
89
- const xForwardedHost = event . node . req . headers [ "x-forwarded-host" ] as string ;
90
- if ( xForwardedHost ) {
91
- return xForwardedHost ;
88
+ interface XForwaredOptions {
89
+ respectXForwarded ?: boolean ;
90
+ }
91
+
92
+ export function getRequestHost (
93
+ event : H3Event ,
94
+ opts : { xForwardedHost ?: boolean } = { }
95
+ ) {
96
+ if ( opts . xForwardedHost ) {
97
+ const xForwardedHost = event . node . req . headers [ "x-forwarded-host" ] as string ;
98
+ if ( xForwardedHost ) {
99
+ return xForwardedHost ;
100
+ }
92
101
}
93
102
return event . node . req . headers . host || "localhost" ;
94
103
}
95
104
96
- export function getRequestProtocol ( event : H3Event ) {
97
- if ( event . node . req . headers [ "x-forwarded-proto" ] === "https" ) {
105
+ export function getRequestProtocol (
106
+ event : H3Event ,
107
+ opts : { xForwardedProto ?: boolean } = { }
108
+ ) {
109
+ if (
110
+ opts . xForwardedProto !== false &&
111
+ event . node . req . headers [ "x-forwarded-proto" ] === "https"
112
+ ) {
98
113
return "https" ;
99
114
}
100
115
return ( event . node . req . connection as any ) . encrypted ? "https" : "http" ;
@@ -107,8 +122,11 @@ export function getRequestPath(event: H3Event) {
107
122
return path ;
108
123
}
109
124
110
- export function getRequestURL ( event : H3Event ) {
111
- const host = getRequestHost ( event ) ;
125
+ export function getRequestURL (
126
+ event : H3Event ,
127
+ opts : { xForwardedHost ?: boolean ; xForwardedProto ?: boolean } = { }
128
+ ) {
129
+ const host = getRequestHost ( event , opts ) ;
112
130
const protocol = getRequestProtocol ( event ) ;
113
131
const path = getRequestPath ( event ) ;
114
132
return new URL ( path , `${ protocol } ://${ host } ` ) ;
0 commit comments