dongtang4954 2017-08-30 16:47
浏览 112
已采纳

Gorilla Mux中的config CORS:POST请求出现403错误

I have an API, currently am trying to consume one of its endpoints. The endpoint is for POST requests, the endpoint is working as expected. The API is running in the cloud, I tested it with curl and it was perfect, then from my react app I was trying to consume it but I get 403 status code.

Watching in the console of the browser I see that I get that error on a OPTIONS request, and the POST never get done. Here is a screenshot of the result displayed in the console:

enter image description here

Then, I made a simple HTML file with a form, there I placed the required inputs, and the action pointing to this endpoint and it worked pretty well. Then, I don't know where would be the error? I have enabled CORS in the API

In the API I am using Gorilla/mux and I have something like this:

// 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))

Using:

"github.com/gorilla/mux"
"github.com/gorilla/handlers"

The message that I am getting in the browser is (in Spanish):

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').

In English: basically the server is rejecting the request because the CORS header is not present.

So, what have I done wrong in my router configuration?

  • 写回答

2条回答 默认 最新

  • douershuang7356 2017-09-04 08:03
    关注

    With rs/cors you should solve CORS issues pretty easily.

    On your 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 . . .")
    
    }
    

    And on your testhandler.go, let's suppose you want to accept 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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。