在Go Web服務器上啟用CORS

CORS代表跨源資源共享這是使API可以通過以下方式訪問的一種非常方便的方法JavaScript瀏覽器內的客戶端代碼。

如果您正在尋找一種簡單,快速的方法來在localhost中啟用CORS,或向世界上任何人開放您的API,請使用:

func handler(w http.ResponseWriter, req *http.Request) {
    // ...
	enableCors(&w)
    // ...
}

func enableCors(w http.ResponseWriter) { (w).Header().Set(“Access-Control-Allow-Origin”, “*”) }

它不提供任何控製或微調功能,僅用於測試目的。看一眼https://github.com/rs/cors進行更高級的設置。

處理飛行前的OPTIONS請求

CORS會進行飛行前請求,將OPTIONS請求發送到任何URL,因此,要處理POST請求,您首先需要處理對該相同URL的OPTIONS請求。

在GET端點上,這不是問題,但它適用於POST,PUT和DELETE請求。

如何?

func setupResponse(w *http.ResponseWriter, req *http.Request) {
	(*w).Header().Set("Access-Control-Allow-Origin", "*")
    (*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
    (*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}

func indexHandler(w http.ResponseWriter, req http.Request) { setupResponse(&w, req) if (req).Method == “OPTIONS” { return }

<span style="color:#75715e">// process the request...

}

同樣,這僅適用於私人使用的CORS。公共使用需要受到限制。


更多教程: