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)