From d5e967e17f326ab28660abcdfa1e14b90c9702ec Mon Sep 17 00:00:00 2001 From: Scott Norvell Date: Mon, 5 Jun 2023 14:56:52 -0400 Subject: [PATCH 1/2] suppresses noisy relay error for 0 content-length responses --- .gitignore | 1 + relay/traffic/handler.go | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b2e369a..2f76b68 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /dist /.vscode +/.idea diff --git a/relay/traffic/handler.go b/relay/traffic/handler.go index 059ad33..40cb9fd 100644 --- a/relay/traffic/handler.go +++ b/relay/traffic/handler.go @@ -137,7 +137,9 @@ func (handler *Handler) handleHttp(clientResponse http.ResponseWriter, clientReq } else if targetResponse.ContentLength < 0 { clientResponse.WriteHeader(targetResponse.StatusCode) if _, err := io.CopyN(clientResponse, targetResponse.Body, handler.config.MaxBodySize); err != nil { - logger.Printf("Error relaying response body with unknown content-length: %s", err) + // NOTE: it is highly likely the server would come back without a content-length especially with + // mobile traffic. In this case, full copy happens but we get an EOF error that can be safely + // ignored. See this example: https://go.dev/play/p/8T3kbRfk_vO } } else { clientResponse.WriteHeader(targetResponse.StatusCode) From c7dcef59201d8562440ee05b23665918ac3fdac8 Mon Sep 17 00:00:00 2001 From: Scott Norvell Date: Tue, 20 Jun 2023 16:44:09 -0400 Subject: [PATCH 2/2] catch EOF errors, log all else --- relay/traffic/handler.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/relay/traffic/handler.go b/relay/traffic/handler.go index 40cb9fd..0a45466 100644 --- a/relay/traffic/handler.go +++ b/relay/traffic/handler.go @@ -3,6 +3,7 @@ package traffic import ( "bytes" "crypto/tls" + "errors" "fmt" "io" "log" @@ -139,7 +140,10 @@ func (handler *Handler) handleHttp(clientResponse http.ResponseWriter, clientReq if _, err := io.CopyN(clientResponse, targetResponse.Body, handler.config.MaxBodySize); err != nil { // NOTE: it is highly likely the server would come back without a content-length especially with // mobile traffic. In this case, full copy happens but we get an EOF error that can be safely - // ignored. See this example: https://go.dev/play/p/8T3kbRfk_vO + // ignored. See this example: https://go.dev/play/p/xotsgkwhJis + if !errors.Is(err, io.EOF) { + logger.Printf("Error relaying response body with unknown content-length: %s", err) + } } } else { clientResponse.WriteHeader(targetResponse.StatusCode)