【问题标题】:Server blocks CORS even though I enabled localhost即使我启用了 localhost,服务器也会阻止 CORS
【发布时间】:2020-12-22 06:09:52
【问题描述】:

我正在运行 Go 服务器并通过 Axios 在 React.js 中发出 POST 请求。 我似乎已经尝试了 StackOverflow 上能够找到的所有内容,但由于某种原因,它仍然无法正常工作。

这是我的服务器代码(我一直在使用 /test 端点进行测试:

func main() {

    r := mux.NewRouter()

    r.HandleFunc("/api/patients", getPatients).Methods("GET")
    r.HandleFunc("/api/patients", createPatient).Methods("POST")
    r.HandleFunc("/api/login", validateAdmin).Methods("POST")
    r.HandleFunc("/test", testPOST).Methods("POST", "OPTIONS")

    // set up server on port 8000
    log.Fatal(http.ListenAndServe(":8080", handlers.CORS(handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"}), handlers.AllowedMethods([]string{"GET", "POST", "PUT", "HEAD", "OPTIONS"}), handlers.AllowedOrigins([]string{"http://localhost:3000"}))(r)))
}

// Test POST requests
func testPOST(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Origin", "*")

    decoder := json.NewDecoder(r.Body)

    // irrelevant code that retrieves data from MySQL
    // irrelevant code that retrieves data from MySQL
    // irrelevant code that retrieves data from MySQL 

    w.WriteHeader(http.StatusOK)

    // encode inserted patient as json and send back
    json.NewEncoder(w).Encode(patient)

}

这是我发出 POST 请求的方式:

function submitData(event) {
        console.log("SUBMITTED FORM DATA");
        event.preventDefault(); // prevent from page refreshing
        const patient = {
            name: name,
            dob: dob,
            phone: phone,
            email: email,
            address: address
        };

        // send post request to API
        axios.post('http://localhost:8080/test', { patient }, {headers: {'Access-Control-Allow-Origin': '*'}}, { crossdomain: true })
            .then (res => {
                console.log(res);
                console.log(res.data);
            })
        event.preventDefault(); // prevent from page refreshing
    }

我的错误信息:

从源“http://localhost:8080/test”访问 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否请求的资源上存在 Access-Control-Allow-Origin' 标头。

非常感谢任何帮助!

【问题讨论】:

    标签: http go http-headers cors


    【解决方案1】:

    我通过浏览器在我的机器上进行了测试,希望检查更新后的 Allowedmethod 'PATCH'。

    package main
    
    import (
        "log"
        "net/http"
        "github.com/gorilla/mux"
        "github.com/rs/cors"
    )
    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/api/patients", getPatients).Methods("GET")
        r.HandleFunc("/api/patients", createPatient).Methods("POST")
        r.HandleFunc("/api/login", validateAdmin).Methods("POST")
        r.HandleFunc("/test", testPOST).Methods("POST", "OPTIONS")
    
        cors := cors.New(cors.Options{
            AllowedOrigins: []string{"*"},
            AllowedHeaders: []string{"Content-Type", "Content-Length", "Accept-Encoding", "X-CSRF-Token", "Authorization"},
            AllowedMethods: []string{"GET", "PATCH", "POST", "PUT", "OPTIONS", "DELETE"},
        })
        srv := &http.Server{
            Handler:      cors.Handler(r),
            Addr:         ":8080",
            WriteTimeout: 1 * time.Minute,
            ReadTimeout:  1 * time.Minute,
        }
        log.Fatal(srv.ListenAndServe())
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 2021-03-29
      • 2020-12-09
      • 2021-10-28
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      相关资源
      最近更新 更多