@@ -32,8 +32,9 @@ func NewProxy(
32
32
logger * log.Logger ,
33
33
) * Proxy {
34
34
reverseProxy := & httputil.ReverseProxy {
35
- Director : director (defaultBackend , logger ),
36
- ErrorHandler : errorHandler (logger ),
35
+ Director : director (defaultBackend , logger ),
36
+ ModifyResponse : modifyResponse (),
37
+ ErrorHandler : errorHandler (logger ),
37
38
}
38
39
return & Proxy {
39
40
server : & http.Server {
@@ -92,6 +93,22 @@ func director(defaultBackend *url.URL, logger *log.Logger) func(req *http.Reques
92
93
}
93
94
}
94
95
96
+ func modifyResponse () func (* http.Response ) error {
97
+ return func (res * http.Response ) error {
98
+ route , ok := res .Request .Context ().Value (routeCtxKey ).(* domain.Route )
99
+ if ! ok {
100
+ // if route not set, then default backend was used and no route match config available
101
+ return nil
102
+ }
103
+
104
+ for k , v := range route .ProxyResponseHeaders {
105
+ res .Header .Set (k , v )
106
+ }
107
+
108
+ return nil
109
+ }
110
+ }
111
+
95
112
func errorHandler (logger * log.Logger ) func (http.ResponseWriter , * http.Request , error ) {
96
113
return func (w http.ResponseWriter , r * http.Request , err error ) {
97
114
logger .Printf ("%+v\n " , err )
@@ -135,6 +152,7 @@ func handler(
135
152
logger .Printf (err .Error ())
136
153
w .WriteHeader (http .StatusBadGateway )
137
154
_ , _ = w .Write ([]byte ("Bad gateway" ))
155
+ return
138
156
}
139
157
140
158
http .Redirect (w , r , u .String (), redirectStatusCode (matchedRoute .Redirect .Type ))
0 commit comments