在Go 中處理預檢CORS 請求
當從Go 伺服器提供跨站點HTTP 請求時,使用者代理程式可能會發送預檢OPTIONS 請求驗證請求的安全性。本文探討了優雅地處理和回應這些預檢請求的最佳實踐。
傳統上,使用net/http 包,可以在處理函數中檢查請求方法:
func AddResourceHandler(rw http.ResponseWriter, r *http.Request) { switch r.Method { case "OPTIONS": // handle preflight case "PUT": // respond to actual request } }
或者,使用Gorilla 的mux 包,可以為每個URL 註冊一個單獨的預檢處理程序path:
r := mux.NewRouter() r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT") r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")
要簡化此流程,請考慮使用處理預檢請求的CORS 處理程序包裝REST處理程序。例如,使用net/http 的Handle 方法:
func corsHandler(h http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if (r.Method == "OPTIONS") { //handle preflight in here } else { h.ServeHTTP(w,r) } } }
這個包裝器可以如下使用:
http.Handle("/endpoint/", corsHandler(restHandler))
透過包裝REST 處理程序,您可以分離邏輯並重複使用CORS 處理程序處理所有相關請求,提供更優雅且可維護的解決方案。
以上是如何在 Go 中優雅地處理預檢 CORS 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!