本篇文章為大家展示了基于gorilla/mux 包實(shí)現(xiàn)路由匹配中如何通過CORS處理跨域請(qǐng)求,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)專注于新鄭網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供新鄭營(yíng)銷型網(wǎng)站建設(shè),新鄭網(wǎng)站制作、新鄭網(wǎng)頁設(shè)計(jì)、新鄭網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造新鄭網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供新鄭網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
在 SPA 應(yīng)用或者其他前后端分離應(yīng)用中,如果前后端域名不一致,則可能涉及到跨域請(qǐng)求問題。
關(guān)于跨域請(qǐng)求和 CORS 學(xué)院君之前在 Laravel CORS 擴(kuò)展包使用教程 中曾簡(jiǎn)單介紹過,不了解的可以去看下,這里不再重復(fù)講了,Go 語言這邊的原理和那里一致,在基于 gorilla/mux 實(shí)現(xiàn)的路由器中,為了通過 CORS 處理跨域請(qǐng)求,可以這么做:
在自己的 CORS 處理器中設(shè)置 CORS 相關(guān)頭,比如 Access-Control-Allow-Origin
通過 CORSMethodMiddleware 這個(gè)中間件來設(shè)置 Access-Control-Allow-Methods
響應(yīng)頭定義路由允許的 HTTP 請(qǐng)求方法
?? 為了讓中間件設(shè)置響應(yīng)頭,必須在請(qǐng)求方法匹配器中包含
OPTIONS
方法。
下面我們來看一個(gè)簡(jiǎn)單的示例:
package main
import (
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
// 注意: 為了讓中間件可以設(shè)置 CORS 頭在 Methods 方法中必須包含 OPTIONS 方法
r.HandleFunc("/api/cors", corsHandler).Methods(http.MethodGet, http.MethodPut, http.MethodOptions)
// CORSMethodMiddleware 中間件會(huì)將上一步設(shè)置的方法設(shè)置到 Access-Control-Allow-Methods 響應(yīng)頭
r.Use(mux.CORSMethodMiddleware(r))
http.ListenAndServe(":8080", r)
}
func corsHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
if r.Method == http.MethodOptions {
return
}
w.Write([]byte("Cors Request"))
}
運(yùn)行這段代碼啟動(dòng)服務(wù)器,然后通過如下命令對(duì) /api/cors
路由發(fā)起請(qǐng)求:
curl -v http://localhost:8080/api/cors
使用 -v
選項(xiàng)可以看到請(qǐng)求頭和響應(yīng)頭信息,結(jié)果如下:
可以看到響應(yīng)頭中包含了 Access-Control-Allow-Methods
和 Access-Control-Allow-Origin
響應(yīng)頭,分別表示跨域請(qǐng)求支持的方法和域名,如果前端域名是 fontend.xueyuanjun.com
,后端域名是 backend.xueyuanjun.com
,那么現(xiàn)在它們之間可以基于 Ajax 請(qǐng)求進(jìn)行通信了。
上述內(nèi)容就是基于gorilla/mux 包實(shí)現(xiàn)路由匹配中如何通過CORS處理跨域請(qǐng)求,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。