我試著將http方法設定為 "GET",如果傳入的請求方法是 "HEAD",在一個中間件中,如下所示。
如果我做curl -I,看起來Gin將其識別為 "GET "請求。 但它的反應是404,正如所附的日志顯示的那樣(最下面的那條)。
我只是想看看,如果不在路由器級別實施 "HEAD "方法,這是否可行。 有什么建議嗎?
func CORS() gin。 HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*" )
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
c.Writer.Header().Set("Access-Control-Allow-Headers", "*")
c.Writer.Header().Set("Access-Control-Allow-Methods", "*")
if c.Request.Method == "OPTIONS"/span> {
c.AbortWithStatus(http.StatusNoContent)
回傳。
}
//設定http方法為 "GET",如果傳入的請求是 "HEAD"。
if c.Request.Method == "HEAD"/span> {
c.Request.Method = "GET"
uj5u.com熱心網友回復:
因為gin的中間件是路由匹配后獲得的處理函式,中間件在路由匹配后執行,所以中間件不能修改路由匹配方法。
通過裝飾一層http.Handler(gin.Engine),使用http.Server中間件來修改請求方法。
注意:"HEAD "請求沒有回應體。如果將'HEAD'轉換為'GET'后有回應體,不符合http協議規范,建議用'Head'方法注冊所有'Get'處理函式。
func main() {
router := gin.Default()
s := &http.Server{
Addr: ":8080"。
處理程式:http.Handler(func(w http.ResponseWriter, r *http.Request){
if r.Method == "HEAD"/span> {
r.Method = = "GET" ?
}
router.ServeHTTP(w, r)
}),
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/311855.html
標籤:
