Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 19 additions & 8 deletions cors.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ as defined by http://www.w3.org/TR/cors/

You can configure it by passing an option struct to cors.New:

c := cors.New(cors.Options{
AllowedOrigins: []string{"foo.com"},
AllowedMethods: []string{http.MethodGet, http.MethodPost, http.MethodDelete},
AllowCredentials: true,
})
c := cors.New(cors.Options{
AllowedOrigins: []string{"foo.com"},
AllowedMethods: []string{http.MethodGet, http.MethodPost, http.MethodDelete},
AllowCredentials: true,
})

Then insert the handler in the chain:

handler = c.Handler(handler)
handler = c.Handler(handler)

See Options documentation for more options.

Expand Down Expand Up @@ -162,8 +162,19 @@ func New(options Options) *Cors {
// Use sensible defaults
c.allowedHeaders = []string{"Origin", "Accept", "Content-Type", "X-Requested-With"}
} else {
// Origin is always appended as some browsers will always request for this header at preflight
c.allowedHeaders = convert(append(options.AllowedHeaders, "Origin"), http.CanonicalHeaderKey)
// Remove duplicated allowed headers
allowedHeadersMap := map[string]struct{}{
// Origin is always appended as some browsers will always request for this header at preflight
"Origin": {},
}
for _, h := range options.AllowedHeaders {
allowedHeadersMap[h] = struct{}{}
}
allowedHeadersToConvert := []string{}
for k := range allowedHeadersMap {
allowedHeadersToConvert = append(allowedHeadersToConvert, k)
}
c.allowedHeaders = convert(allowedHeadersToConvert, http.CanonicalHeaderKey)
for _, h := range options.AllowedHeaders {
if h == "*" {
c.allowedHeadersAll = true
Expand Down
6 changes: 6 additions & 0 deletions cors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,12 @@ func TestCorsAreHeadersAllowed(t *testing.T) {
requestedHeaders: parseHeaderList("X-PINGOTHER, Content-Type"),
want: false,
},
{
name: "no repeated headers",
allowedHeaders: []string{"Origin", "Origin", "Origin", "Content-Type", "Content-Type"},
requestedHeaders: parseHeaderList("Origin, Content-Type"),
want: true,
},
}

for _, tt := range cases {
Expand Down