diff --git a/g/net/ghttp/http_response.go b/g/net/ghttp/http_response.go index 933e53b97..ecc7c0790 100644 --- a/g/net/ghttp/http_response.go +++ b/g/net/ghttp/http_response.go @@ -136,6 +136,14 @@ func (r *Response) SetAllowCrossDomainRequest(allowOrigin string, allowMethods s // 返回HTTP Code状态码 func (r *Response) WriteStatus(status int, content...string) { if len(r.buffer) == 0 { + // 状态码注册回调函数处理 + if status != http.StatusOK { + if f := r.request.Server.getStatusHandler(status, r.request); f != nil { + f(r.request) + r.WriteHeader(status) + return + } + } r.Header().Set("Content-Type", "text/plain; charset=utf-8") r.Header().Set("X-Content-Type-Options", "nosniff") if len(content) > 0 { @@ -183,10 +191,11 @@ func (r *Response) ClearBuffer() { // 输出缓冲区数据到客户端 func (r *Response) OutputBuffer() { - r.mu.Lock() if len(r.buffer) > 0 { + r.mu.Lock() r.ResponseWriter.Write(r.buffer) r.buffer = make([]byte, 0) + r.mu.Unlock() } - r.mu.Unlock() + } diff --git a/g/net/ghttp/http_server_handler.go b/g/net/ghttp/http_server_handler.go index fb13f5bc3..9550fc9cb 100644 --- a/g/net/ghttp/http_server_handler.go +++ b/g/net/ghttp/http_server_handler.go @@ -59,11 +59,6 @@ func (s *Server)handleRequest(w http.ResponseWriter, r *http.Request) { // 事件 - AfterServe s.callHookHandler(request, "AfterServe") - // 状态码注册回调函数处理 - if f := request.Server.getStatusHandler(request.Response.Status, request); f != nil { - f(request) - } - // 设置请求完成时间 request.LeaveTime = gtime.Microsecond() diff --git a/geg/net/ghttp/status.go b/geg/net/ghttp/status.go index 0e823056c..c68cafc66 100644 --- a/geg/net/ghttp/status.go +++ b/geg/net/ghttp/status.go @@ -12,7 +12,6 @@ func main() { r.Response.WriteStatus(404) }) s.BindStatusHandler(404, func(r *ghttp.Request){ - r.Response.ClearBuffer() r.Response.Writeln("This is customized 404 page") }) s.SetPort(8199)