golang 的net/http 中間件配置跨域

最近在拿go寫一個(gè)小工具,web方向,只用了net/http基礎(chǔ)框架。在使用過程中遇到了跨域問題。
。。。。。。
中間我就不bb了,直接記錄代碼

//定義中間件
func CrosMiddleware(handler http.HandlerFunc) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "*")                                                                                         // 指明哪些請求源被允許訪問資源,值可以為 "*","null",或者單個(gè)源地址。
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")                              //對于預(yù)請求來說,指明了哪些頭信息可以用于實(shí)際的請求中。
        w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")                                                                       //對于預(yù)請求來說,哪些請求方式可以用于實(shí)際的請求。
        w.Header().Set("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type") //對于預(yù)請求來說,指明哪些頭信息可以安全的暴露給 CORS API 規(guī)范的 API
        w.Header().Set("Access-Control-Allow-Credentials", "true")                                                                                 //指明當(dāng)請求中省略 creadentials 標(biāo)識時(shí)響應(yīng)是否暴露。對于預(yù)請求來說,它表明實(shí)際的請求中可以包含用戶憑證。

        //放行所有OPTIONS方法
        if r.Method == "OPTIONS" {
            w.WriteHeader(200)
            return
        }
        handler.ServeHTTP(w, r)
    })
}
//具體使用
func StartSocket() {
    http.Handle("/login", service.CrosMiddleware(service.Login))
    log.Println("Serving at localhost:8000...")
    log.Fatal(http.ListenAndServe(":8000", nil))
}

說穿了,他是在瀏覽器使用options訪問的時(shí)候,對response的header進(jìn)行幾個(gè)屬性值進(jìn)行修改

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容