CORS 預(yù)檢神秘地因大猩猩/處理程序而失敗
我正在通過 Heroku 為我的應(yīng)用程序發(fā)布一個 Golang API。無法讓我的 webapp(Flutter/Dart 堆棧)真正從我的 api 獲得成功的響應(yīng)。但是,我可以使用本地的 curl 命令獲得成功的響應(yīng)。我已經(jīng)閱讀了幾篇關(guān)于更改 Go mux 服務(wù)器和添加正確標(biāo)頭的文章,但這對我不起作用。我什至看到在我的 curl 請求期間返回了這些標(biāo)頭。真的可以使用一些幫助,因?yàn)檫@會減慢我的速度。本質(zhì)上這是我創(chuàng)建服務(wù)器的主要課程import ( "api/preventative_care" "api/user" "github.com/gorilla/handlers" "github.com/gorilla/mux" "log" "net/http" "os")func main() { log.SetFlags(log.LstdFlags | log.Llongfile) router := mux.NewRouter() // Where ORIGIN_ALLOWED is like `scheme://dns[:port]`, or `*` (insecure) headersOk := handlers.AllowedHeaders([]string{"*"}) methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"}) originsOk := handlers.AllowedOrigins([]string{"*"}) router.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { log.Println("Up and running!") }) router.HandleFunc("/api/login", user.LoginHandler).Methods("GET") router.HandleFunc("/api/recommendations", preventative_care.RecommendationHandler).Methods("GET") var port = os.Getenv("PORT") log.Printf("Starting application on port %s\n", port) //log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), router)) log.Fatal(http.ListenAndServe(":" + os.Getenv("PORT"), handlers.CORS(originsOk, headersOk, methodsOk)(router)))}調(diào)用此 API 的 dart 代碼如下所示: Map<String, String> headers = { "content-type": "application/json", "username": username, "password": password }; final response = await http.get(Uri.parse(uri), headers: headers);我以為我應(yīng)該看到Access-Control-Allow-Origin: *那里添加了 Header ,但還沒有我仍然獲得 200 成功。但是,當(dāng)我嘗試使用我的 Webapp 從使用 Google Chrome 的登錄屏幕點(diǎn)擊 API 時,我看到了這個錯誤:從源“https://my-app-staging.herokuapp.com”訪問“https://my-app-api.herokuapp.com/api/login”處的 XMLHttpRequest 已被 CORS 策略阻止:對預(yù)檢的響應(yīng)請求未通過訪問控制檢查:請求的資源上不存在“Access-Control-Allow-Origin”標(biāo)頭。不知道 - 好像標(biāo)題正在被 Chrome 或其他東西刪除?
查看完整描述