我有一个API,目前正在尝试使用其端点之一。该端点用于POST请求,该端点按预期方式工作。该API在云中运行,我使用curl对其进行了测试,它是完美的,然后从我的react应用程序中尝试使用它,但得到了403 status code

在浏览器的控制台中观看时,我看到我在OPTIONS请求中收到该错误,并且POST从未完成。这是控制台中显示的结果的屏幕截图:

reactjs - 在Gorilla Mux中配置CORS : 403 error on POST request-LMLPHP

然后,我制作了一个带有表单的简单HTML文件,在其中放置了所需的输入,并且 Action 指向了该端点,并且效果很好。然后,我不知道错误在哪里?我已在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"

我在浏览器中收到的消息是(西类牙语):



用英语:基本上,由于CORS header 不存在,服务器拒绝了该请求。

那么,我在路由器配置中做错了什么?

最佳答案

使用rs/cors,您应该可以轻松解决CORS问题。

在您的服务器上。

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
}

关于reactjs - 在Gorilla Mux中配置CORS : 403 error on POST request,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45967591/

10-16 00:14