diff --git a/internal/waf/action_base.go b/internal/waf/action_base.go index 16e9fdc..5738412 100644 --- a/internal/waf/action_base.go +++ b/internal/waf/action_base.go @@ -2,10 +2,6 @@ package waf -import ( - "net/http" -) - type BaseAction struct { currentActionId int64 } @@ -19,16 +15,3 @@ func (this *BaseAction) ActionId() int64 { func (this *BaseAction) SetActionId(actionId int64) { this.currentActionId = actionId } - -// CloseConn 关闭连接 -func (this *BaseAction) CloseConn(writer http.ResponseWriter) error { - // 断开连接 - hijack, ok := writer.(http.Hijacker) - if ok { - conn, _, err := hijack.Hijack() - if err == nil && conn != nil { - return conn.Close() - } - } - return nil -} diff --git a/internal/waf/action_get_302.go b/internal/waf/action_get_302.go index 021176c..77ad758 100644 --- a/internal/waf/action_get_302.go +++ b/internal/waf/action_get_302.go @@ -70,7 +70,12 @@ func (this *Get302Action) Perform(waf *WAF, group *RuleGroup, set *RuleSet, requ http.Redirect(writer, request.WAFRaw(), Get302Path+"?info="+url.QueryEscape(info), http.StatusFound) if request.WAFRaw().ProtoMajor == 1 { - _ = this.CloseConn(writer) + flusher, ok := writer.(http.Flusher) + if ok { + flusher.Flush() + } + + request.WAFClose() } return false, false diff --git a/internal/waf/action_post_307.go b/internal/waf/action_post_307.go index 5f701dd..3fafd4e 100644 --- a/internal/waf/action_post_307.go +++ b/internal/waf/action_post_307.go @@ -87,7 +87,12 @@ func (this *Post307Action) Perform(waf *WAF, group *RuleGroup, set *RuleSet, req http.Redirect(writer, request.WAFRaw(), request.WAFRaw().URL.String(), http.StatusTemporaryRedirect) if request.WAFRaw().ProtoMajor == 1 { - _ = this.CloseConn(writer) + flusher, ok := writer.(http.Flusher) + if ok { + flusher.Flush() + } + + request.WAFClose() } return false, false