【发布时间】:2019-12-22 20:04:09
【问题描述】:
我已经在我的 Go 服务器中编写了这段代码:
func main() {
r := chi.NewRouter()
cors := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowOriginFunc: func(r *http.Request, origin string) bool { return true },
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"},
ExposedHeaders: []string{"Link"},
AllowCredentials: true,
OptionsPassthrough: true,
MaxAge: 3599, // Maximum value not ignored by any of major browsers
})
flag.Parse()
// A good base middleware stack
r.Use(cors.Handler)
r.Use(middleware.RequestID)
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
r.Use(middleware.URLFormat)
r.Use(render.SetContentType(render.ContentTypeJSON))
r.Use(middleware.Timeout(60 * time.Second))
r.Group(func(r chi.Router) {
r.Route("/api", func(r chi.Router) {
r.Route("/items", func(r chi.Router) {
r.Get("/", allItems)
r.Route("/{barcode}", func(r chi.Router) {
r.Get("/", getItem)
r.Put("/", updateItem)
})
r.Post("/", postItem)
r.Delete("/", deleteItem)
})
r.Route("/sale_lines", func(r chi.Router) {
// r.Use(cors.Handler)
r.Post("/", postSales)
r.Put("/", updateSales)
r.Delete("/", deleteSales)
})
})
})
http.ListenAndServe(":8080", r)
}
我面临的问题是,当我从我的 react 应用程序调用 api 时,它给了我这样的错误:
从源“http://localhost:3000”访问“http://localhost:8080/api/sale_lines”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。
我错过了什么问题?
【问题讨论】:
-
请将您的代码格式化为也可读。
-
它所指的“预检请求”是一个 HTTP OPTIONS 请求;基本上,错误是说当它发出原始 OPTIONS 请求以查看是否允许使用 CORS 时,它没有得到 200 返回,它得到了其他东西。您可以通过使用
curl或 Postman 之类的方式向该 URL 发出 OPTIONS 请求来查看它得到的确切响应,这应该有助于缩小问题范围。 -
@Adrian 我从邮递员那里检查过,它返回了 ok 状态,但我的 react 应用程序仍然显示上述错误