File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -269,9 +269,11 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc {
269269
270270 // Simple request
271271 if ! preflight {
272- err := next (c )
273272 // Skip setting CORS headers when an upstream handler (e.g. reverse proxy) already set them.
274- if res .Header ().Get (echo .HeaderAccessControlAllowOrigin ) == "" {
273+ setHeaders := func () {
274+ if res .Header ().Get (echo .HeaderAccessControlAllowOrigin ) != "" {
275+ return
276+ }
275277 res .Header ().Add (echo .HeaderVary , echo .HeaderOrigin )
276278 res .Header ().Set (echo .HeaderAccessControlAllowOrigin , allowOrigin )
277279 if config .AllowCredentials {
@@ -281,6 +283,11 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc {
281283 res .Header ().Set (echo .HeaderAccessControlExposeHeaders , exposeHeaders )
282284 }
283285 }
286+ res .Before (setHeaders )
287+ err := next (c )
288+ if ! res .Committed {
289+ setHeaders ()
290+ }
284291 return err
285292 }
286293
Original file line number Diff line number Diff line change @@ -720,8 +720,11 @@ func TestCORSNoDuplicateHeadersFromUpstream(t *testing.T) {
720720 rec := httptest .NewRecorder ()
721721 proxy .ServeHTTP (rec , req )
722722
723+ result := rec .Result ()
724+ defer result .Body .Close ()
725+
723726 assert .Equal (t , http .StatusOK , rec .Code )
724- assert .Equal (t , 1 , len (rec .Header () [echo .HeaderAccessControlAllowOrigin ]))
725- assert .Equal (t , "*" , rec .Header () .Get (echo .HeaderAccessControlAllowOrigin ))
726- assert .Equal (t , 1 , len (rec .Header () [echo .HeaderVary ]))
727+ assert .Equal (t , 1 , len (result .Header [echo .HeaderAccessControlAllowOrigin ]))
728+ assert .Equal (t , "*" , result .Header .Get (echo .HeaderAccessControlAllowOrigin ))
729+ assert .Equal (t , 1 , len (result .Header [echo .HeaderVary ]))
727730}
You can’t perform that action at this time.
0 commit comments