配置CORS在大猩猩多路复用器:在POST请求403错误

问题描述 投票:1回答:2

我有一个API,目前正在试图消耗它的一个端点。端点是POST请求,端点按预期工作。该API是在云中运行,我curl测试,它是完美的,然后从我的反应程序,我试图使用它,但我得到403 status code

在浏览器的控制台看着我看到,我得到一个OPTIONS请求的错误,和POST永远不会完成。下面是在控制台中显示的结果的截图:

enter image description here

于是,我做了一个简单的HTML文件,表格,还有我把所需的投入和行动指向这个端点,它工作得很好。然后,我不知道在哪里会出错?我曾经在API中启用CORS

在API我使用大猩猩/ 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"

我在浏览器中我得到的消息是(西班牙):

应用从另一个源阻止:相同的起源策略阻止读取远程资源中https://miURL(理由:错过CORS“访问控制允许来源”标题)。

在英国:基本上服务器拒绝该请求,因为CORS头不存在。

所以,我做了什么错在我的路由器配置?

reactjs post go http-post gorilla
2个回答
3
投票

随着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
}

0
投票

解决方案:)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    //this is the solution
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

要么

   upgrader.CheckOrigin = func(r *http.Request) bool { return true } //this :)
   ws, err := upgrader.Upgrade(w,r,nil)
© www.soinside.com 2019 - 2024. All rights reserved.