From 0a2e1759a48db6cbe3ff2ec0dc3b86208f4f9751 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 3 Jul 2023 16:23:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96SSE=E5=A4=84=E7=90=86/?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B6=85=E6=97=B6=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/client_conn_base.go | 3 +++ internal/nodes/http_request_reverse_proxy.go | 14 +++++++++++++- internal/nodes/http_writer.go | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/internal/nodes/client_conn_base.go b/internal/nodes/client_conn_base.go index 11201c2..d193542 100644 --- a/internal/nodes/client_conn_base.go +++ b/internal/nodes/client_conn_base.go @@ -7,6 +7,7 @@ import ( "github.com/TeaOSLab/EdgeNode/internal/firewalls" "github.com/TeaOSLab/EdgeNode/internal/iplibrary" "net" + "time" ) type BaseClientConn struct { @@ -146,6 +147,8 @@ func (this *BaseClientConn) SetLinger(seconds int) error { func (this *BaseClientConn) SetIsPersistent(isPersistent bool) { this.isPersistent = isPersistent + + _ = this.rawConn.SetDeadline(time.Time{}) } // SetFingerprint 设置指纹信息 diff --git a/internal/nodes/http_request_reverse_proxy.go b/internal/nodes/http_request_reverse_proxy.go index 0edf89a..a682959 100644 --- a/internal/nodes/http_request_reverse_proxy.go +++ b/internal/nodes/http_request_reverse_proxy.go @@ -461,7 +461,19 @@ func (this *HTTPRequest) doOriginRequest(failedOriginIds []int64, failedLnNodeId this.ProcessResponseHeaders(this.writer.Header(), resp.StatusCode) // 是否需要刷新 - var shouldAutoFlush = this.reverseProxy.AutoFlush || this.RawReq.Header.Get("Accept") == "text/event-stream" + var shouldAutoFlush = this.reverseProxy.AutoFlush || (resp.Header != nil && strings.Contains(resp.Header.Get("Content-Type"), "stream")) + + // 设置当前连接为Persistence + if shouldAutoFlush && this.nodeConfig != nil && this.nodeConfig.HasConnTimeoutSettings() { + var requestConn = this.RawReq.Context().Value(HTTPConnContextKey) + if requestConn == nil { + return + } + requestClientConn, ok := requestConn.(ClientConnInterface) + if ok { + requestClientConn.SetIsPersistent(true) + } + } // 准备 var delayHeaders = this.writer.Prepare(resp, resp.ContentLength, resp.StatusCode, true) diff --git a/internal/nodes/http_writer.go b/internal/nodes/http_writer.go index 8614e8e..b5984ff 100644 --- a/internal/nodes/http_writer.go +++ b/internal/nodes/http_writer.go @@ -793,7 +793,7 @@ func (this *HTTPWriter) AddHeaders(header http.Header) { } switch key { case "ETag": - newHeaders[key] =value + newHeaders[key] = value default: for _, v := range value { newHeaders.Add(key, v)