在 Gorilla Mux 中配置 CORS:POST 请求时出现 403 错误
config CORS in Gorilla Mux: 403 error on POST request
我有一个 API,目前正在尝试使用它的一个端点。端点用于 POST 请求,端点按预期工作。 API 在云中是 运行,我用 curl
测试了它,它很完美,然后我试图从我的 React 应用程序中使用它,但我得到了 403 status code
。
在浏览器的控制台中观察,我发现我在 OPTIONS 请求中收到了该错误,并且 POST 从未完成。这是控制台中显示的结果的屏幕截图:
然后,我制作了一个带有表单的简单 HTML 文件,我在其中放置了所需的输入和指向此端点的操作,它运行良好。然后,我不知道错误在哪里?我在 API
中启用了 CORS
在 API 中,我正在使用 Gorilla/mux,我有这样的东西:
// Set up a router and some routes
r := mux.NewRouter()
r.HandleFunc("/", handleHome)
//some other routes
headersOk := handlers.AllowedHeaders([]string{"*"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
// Start http server
port := fmt.Sprintf(":%d", SomePort)
http.ListenAndServe(port, handlers.CORS(originsOk, headersOk, methodsOk)(r))
使用:
"github.com/gorilla/mux"
"github.com/gorilla/handlers"
我在浏览器中收到的消息是(西班牙语):
Solicitud desde otro origen bloqueada: la política de mismo origen
impide leer el recurso remoto en https://miURL (razón: falta la
cabecera CORS 'Access-Control-Allow-Origin').
英语:基本上服务器拒绝请求,因为 CORS header 不存在。
那么,我的路由器配置有什么问题吗?
有了 rs/cors,您应该可以很轻松地解决 CORS 问题。
在你的server.go
package main
import (
. . .
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
"github.com/rs/cors"
"../myhandler"
)
func main() {
fmt.Println("Settin up server, enabling CORS . . .")
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"}, // All origins
AllowedMethods: []string{"GET"}, // Allowing only get, just an example
})
router := mux.NewRouter()
// Example handler
router.HandleFunc("/test", myhandler.TestHandler())
http.Handle("/", router)
// Bind to port 8000 and pass our router in and pass the cors Handler
log.Fatal(http.ListenAndServe(":8000"), c.Handler(router)))
fmt.Println("Server is ready and is listening at port :8000 . . .")
}
在您的 testhandler.go 上,假设您想接受 Content-Type: application/json
. . .
func TestHandler func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
return
}
我有一个 API,目前正在尝试使用它的一个端点。端点用于 POST 请求,端点按预期工作。 API 在云中是 运行,我用 curl
测试了它,它很完美,然后我试图从我的 React 应用程序中使用它,但我得到了 403 status code
。
在浏览器的控制台中观察,我发现我在 OPTIONS 请求中收到了该错误,并且 POST 从未完成。这是控制台中显示的结果的屏幕截图:
然后,我制作了一个带有表单的简单 HTML 文件,我在其中放置了所需的输入和指向此端点的操作,它运行良好。然后,我不知道错误在哪里?我在 API
中启用了 CORS在 API 中,我正在使用 Gorilla/mux,我有这样的东西:
// Set up a router and some routes
r := mux.NewRouter()
r.HandleFunc("/", handleHome)
//some other routes
headersOk := handlers.AllowedHeaders([]string{"*"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
// Start http server
port := fmt.Sprintf(":%d", SomePort)
http.ListenAndServe(port, handlers.CORS(originsOk, headersOk, methodsOk)(r))
使用:
"github.com/gorilla/mux"
"github.com/gorilla/handlers"
我在浏览器中收到的消息是(西班牙语):
Solicitud desde otro origen bloqueada: la política de mismo origen impide leer el recurso remoto en https://miURL (razón: falta la cabecera CORS 'Access-Control-Allow-Origin').
英语:基本上服务器拒绝请求,因为 CORS header 不存在。
那么,我的路由器配置有什么问题吗?
有了 rs/cors,您应该可以很轻松地解决 CORS 问题。
在你的server.go
package main
import (
. . .
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
"github.com/rs/cors"
"../myhandler"
)
func main() {
fmt.Println("Settin up server, enabling CORS . . .")
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"}, // All origins
AllowedMethods: []string{"GET"}, // Allowing only get, just an example
})
router := mux.NewRouter()
// Example handler
router.HandleFunc("/test", myhandler.TestHandler())
http.Handle("/", router)
// Bind to port 8000 and pass our router in and pass the cors Handler
log.Fatal(http.ListenAndServe(":8000"), c.Handler(router)))
fmt.Println("Server is ready and is listening at port :8000 . . .")
}
在您的 testhandler.go 上,假设您想接受 Content-Type: application/json
. . .
func TestHandler func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
return
}