github.com/vektah/gqlgen@v0.7.2/docs/content/recipes/cors.md (about) 1 --- 2 title: "Setting CORS headers using rs/cors for gqlgen" 3 description: Use the best of breed rs/cors library to set CORS headers when working with gqlgen 4 linkTitle: CORS 5 menu: { main: { parent: 'recipes' } } 6 --- 7 8 Cross-Origin Resource Sharing (CORS) headers are required when your graphql server lives on a different domain to the one your client code is served. You can read more about CORS in the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS). 9 10 ## rs/cors 11 12 gqlgen doesn't include a CORS implementation, but it is built to work with all standard http middleware. Here we are going to use the fantastic `chi` and `rs/cors` to build our server. 13 14 ```go 15 package main 16 17 import ( 18 "net/http" 19 20 "github.com/99designs/gqlgen/example/starwars" 21 "github.com/99designs/gqlgen/handler" 22 "github.com/go-chi/chi" 23 "github.com/rs/cors" 24 ) 25 26 func main() { 27 router := chi.NewRouter() 28 29 // Add CORS middleware around every request 30 // See https://github.com/rs/cors for full option listing 31 router.Use(cors.New(cors.Options{ 32 AllowedOrigins: []string{"http://localhost:8080"}, 33 AllowCredentials: true, 34 Debug: true, 35 }).Handler) 36 37 router.Handle("/", handler.Playground("Starwars", "/query")) 38 router.Handle("/query", 39 handler.GraphQL(starwars.NewExecutableSchema(starwars.NewResolver())), 40 ) 41 42 err := http.ListenAndServe(":8080", router) 43 if err != nil { 44 panic(err) 45 } 46 } 47 48 ```