Skip to content

Commit 1c1ffb5

Browse files
committed
refactor(sdk): return 204 for CORS preflight and add docs for SDK CORS handlers
1 parent 193dbea commit 1c1ffb5

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

internal/dev_server/sdk/cors.go

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,38 @@ package sdk
22

33
import "net/http"
44

5+
// CorsHeaders sets CORS headers for SDK flag evaluation endpoints and
6+
// short-circuits preflight OPTIONS requests with 204 No Content.
57
func CorsHeaders(handler http.Handler) http.Handler {
6-
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
7-
writer.Header().Set("Access-Control-Allow-Origin", "*")
8-
writer.Header().Set("Access-Control-Allow-Methods", "GET,OPTIONS")
9-
writer.Header().Set("Access-Control-Allow-Credentials", "true")
10-
writer.Header().Set("Access-Control-Allow-Headers", "Cache-Control,Content-Type,Content-Length,Accept-Encoding,X-LaunchDarkly-User-Agent,X-LaunchDarkly-Payload-ID,X-LaunchDarkly-Wrapper,X-LaunchDarkly-Event-Schema,X-LaunchDarkly-Tags")
11-
writer.Header().Set("Access-Control-Expose-Headers", "Date")
12-
writer.Header().Set("Access-Control-Max-Age", "300")
13-
if request.Method == http.MethodOptions {
14-
writer.WriteHeader(http.StatusOK)
15-
return
16-
}
17-
handler.ServeHTTP(writer, request)
18-
})
8+
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
9+
writer.Header().Set("Access-Control-Allow-Origin", "*")
10+
writer.Header().Set("Access-Control-Allow-Methods", "GET,OPTIONS")
11+
writer.Header().Set("Access-Control-Allow-Credentials", "true")
12+
writer.Header().Set("Access-Control-Allow-Headers", "Cache-Control,Content-Type,Content-Length,Accept-Encoding,X-LaunchDarkly-User-Agent,X-LaunchDarkly-Payload-ID,X-LaunchDarkly-Wrapper,X-LaunchDarkly-Event-Schema,X-LaunchDarkly-Tags")
13+
writer.Header().Set("Access-Control-Expose-Headers", "Date")
14+
writer.Header().Set("Access-Control-Max-Age", "300")
15+
if request.Method == http.MethodOptions {
16+
writer.WriteHeader(http.StatusNoContent)
17+
return
18+
}
19+
handler.ServeHTTP(writer, request)
20+
})
1921
}
2022

23+
// EventsCorsHeaders sets CORS headers for SDK events endpoints and
24+
// short-circuits preflight OPTIONS requests with 204 No Content.
2125
func EventsCorsHeaders(handler http.Handler) http.Handler {
22-
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
23-
writer.Header().Set("Access-Control-Allow-Origin", "*")
24-
writer.Header().Set("Access-Control-Allow-Methods", "POST,OPTIONS")
25-
writer.Header().Set("Access-Control-Allow-Credentials", "true")
26-
writer.Header().Set("Access-Control-Allow-Headers", "Accept,Content-Type,Content-Length,Accept-Encoding,X-LaunchDarkly-Event-Schema,X-LaunchDarkly-User-Agent,X-LaunchDarkly-Payload-ID,X-LaunchDarkly-Wrapper,X-LaunchDarkly-Tags")
27-
writer.Header().Set("Access-Control-Expose-Headers", "Date")
28-
writer.Header().Set("Access-Control-Max-Age", "300")
29-
handler.ServeHTTP(writer, request)
30-
})
26+
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
27+
writer.Header().Set("Access-Control-Allow-Origin", "*")
28+
writer.Header().Set("Access-Control-Allow-Methods", "POST,OPTIONS")
29+
writer.Header().Set("Access-Control-Allow-Credentials", "true")
30+
writer.Header().Set("Access-Control-Allow-Headers", "Accept,Content-Type,Content-Length,Accept-Encoding,X-LaunchDarkly-Event-Schema,X-LaunchDarkly-User-Agent,X-LaunchDarkly-Payload-ID,X-LaunchDarkly-Wrapper,X-LaunchDarkly-Tags")
31+
writer.Header().Set("Access-Control-Expose-Headers", "Date")
32+
writer.Header().Set("Access-Control-Max-Age", "300")
33+
if request.Method == http.MethodOptions {
34+
writer.WriteHeader(http.StatusNoContent)
35+
return
36+
}
37+
handler.ServeHTTP(writer, request)
38+
})
3139
}

0 commit comments

Comments
 (0)