Skip to content

Commit e6dc496

Browse files
committed
fix(middleware): set CORS headers before commit
1 parent d7f848e commit e6dc496

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

middleware/cors.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff 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

middleware/cors_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)