亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 rs.cors 時返回 http 狀態碼

使用 rs.cors 時返回 http 狀態碼

Go
神不在的星期二 2022-06-21 10:03:18
當使用 rs.cors 在 Go Web 服務上啟用 Cors 時,返回 200 以外的 http 狀態代碼(例如,返回 http.StatusTooManyRequests)會導致 CORS 錯誤:從源“http://localhost:8080”訪問“http://localsrv:3021/test?status=toomany”的 XMLHttpRequest 已被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”標頭在請求的資源上。使用 rs.cors 不是必需的,但在某些情況下,如果沒有它,我無法成功地讓 CORS 工作。這是一些示例代碼:package mainimport (    "log"    "net/http"    "github.com/gorilla/mux"    "github.com/rs/cors")func main() {    rtr := mux.NewRouter()    rtr.HandleFunc("/test", test).Methods("GET")    handler := cors.Default().Handler(rtr)    if err := http.ListenAndServe(":3021",        (limitMiddleware(handler))); err != nil {        log.Fatalf("unable to start server: %s", err.Error())    }}func limitMiddleware(next http.Handler) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        params := r.URL.Query()        if params["status"][0] == "toomany" {            http.Error(w, http.StatusText(http.StatusTooManyRequests), http.StatusTooManyRequests)            return        }        next.ServeHTTP(w, r)    })}func test(w http.ResponseWriter, req *http.Request) {    log.Println("test()")}應該生成 StatusTooManyRequests 的 JavaScript 請求以 CORS 錯誤而不是 HTTP 429 結束。axios.get("http://okami:3021/test?status=toomany")  .then(res => {    console.log("stuff http://okami:3021/test result",  res);}); //axios有沒有辦法使用 rs.cors 以便在出現 CORS 問題時啟動 CORS,并且在沒有 CORS 問題時可以返回 http 錯誤代碼?基本上,除非系統返回 HTTP 200,否則 CORS 會啟動。這應該很簡單,但我在這個問題上摸不著頭腦。讓我知道放棄 rs.cors 并改為手動啟用 cors 是否會更好,我可以為此提出另一個問題!
查看完整描述

3 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

limitMiddleware 返回的函數在 cors 中間件(下一個參數)之前執行。重新排序您的處理程序:


rtr := mux.NewRouter()

rtr.HandleFunc("/test", test).Methods("GET")

handler := cors.Default().Handler(limitMiddleware(rtr))

http.ListenAndServe(":3021", handler)


查看完整回答
反對 回復 2022-06-21
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

有沒有辦法使用 rs.cors 以便在出現 CORS 問題時啟動 CORS,并且在沒有 CORS 問題時可以返回 http 錯誤代碼?


除非你處理 cors,否則你會得到它作為錯誤,所以這個問題的解決方法是修復 cors。


使用 rs.cors 不是必需的,但在某些情況下,如果沒有它,我無法成功地讓 CORS 工作。


http.ResponseWriter您可以通過設置Header 值來處理 cors 。你可以這樣做


 func getGoogle(w http.ResponseWriter, r *http.Request) {

    w.Header().Set("Access-Control-Allow-Origin", "*")

}

或用您的前端網址替換“*”。


查看完整回答
反對 回復 2022-06-21
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

您需要指定 Cors,請在您的 main(){ ... } 中嘗試此代碼


    port := ":9000"

    headers := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"})

    methods := handlers.AllowedMethods([]string{"GET", "POST", "PUT", "DELETE"})

    origins := handlers.AllowedOrigins([]string{"*"})


    err = http.ListenAndServe(port, handlers.CORS(headers, methods, origins))

    if err != nil {

        log.Errorf("Error starting server: %s\n", err)

        os.Exit(1)

    }


查看完整回答
反對 回復 2022-06-21
  • 3 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號