diff --git a/http.go b/http.go index 492a9db..31a15d7 100644 --- a/http.go +++ b/http.go @@ -18,19 +18,19 @@ func (b *BaseClient) createHttpClient() (http_client *http.Client) { MaxIdleConns: 100, MaxConnsPerHost: 50, MaxIdleConnsPerHost: 10, - IdleConnTimeout: 30 * time.Second, - ResponseHeaderTimeout: 10 * time.Second, + IdleConnTimeout: 60 * time.Second, + ResponseHeaderTimeout: 20 * time.Second, DisableKeepAlives: false, DisableCompression: true, // Disable automatic compression to prevent trailing garbage errors WriteBufferSize: 4096, ReadBufferSize: 4096, // Additional settings for connection health - ExpectContinueTimeout: 1 * time.Second, // Timeout for 100-Continue - TLSHandshakeTimeout: 10 * time.Second, // Timeout for TLS handshake + ExpectContinueTimeout: 2 * time.Second, // Timeout for 100-Continue + TLSHandshakeTimeout: 20 * time.Second, // Timeout for TLS handshake } http_client = &http.Client{ - Timeout: 30 * time.Second, + Timeout: 60 * time.Second, Transport: httpTransport, CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse @@ -50,9 +50,9 @@ func (b *BaseClient) createHttpClient() (http_client *http.Client) { http2Transport := &http2.Transport{ AllowHTTP: true, TLSClientConfig: tlsClientConfig, - ReadIdleTimeout: 30 * time.Second, // Close idle connections after 30s - PingTimeout: 10 * time.Second, // Detect dead connections with PING - WriteByteTimeout: 10 * time.Second, // Timeout for write operations + ReadIdleTimeout: 60 * time.Second, // Close idle connections after 60s + PingTimeout: 20 * time.Second, // Detect dead connections with PING + WriteByteTimeout: 20 * time.Second, // Timeout for write operations DisableCompression: true, // Disable automatic compression to prevent trailing garbage errors // StrictMaxConcurrentStreams forces the HTTP/2 connection to wait for SETTINGS frame // This helps with connection health detection @@ -60,7 +60,7 @@ func (b *BaseClient) createHttpClient() (http_client *http.Client) { } http_client = &http.Client{ - Timeout: 30 * time.Second, + Timeout: 60 * time.Second, Transport: http2Transport, CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse diff --git a/http_test.go b/http_test.go index e5d0fa6..98ea9ad 100644 --- a/http_test.go +++ b/http_test.go @@ -17,7 +17,7 @@ func (suite *Tests) TestBaseClient_createHttpClient() { httpClient := client.createHttpClient() assert.NotNil(httpClient) - assert.Equal(30*time.Second, httpClient.Timeout) + assert.Equal(60*time.Second, httpClient.Timeout) assert.NotNil(httpClient.Transport) // Check that it's using HTTP/1.1 transport (h2c is rarely supported by servers) @@ -26,8 +26,8 @@ func (suite *Tests) TestBaseClient_createHttpClient() { assert.Equal(100, transport.MaxIdleConns) assert.Equal(50, transport.MaxConnsPerHost) assert.Equal(10, transport.MaxIdleConnsPerHost) - assert.Equal(30*time.Second, transport.IdleConnTimeout) - assert.Equal(10*time.Second, transport.ResponseHeaderTimeout) + assert.Equal(60*time.Second, transport.IdleConnTimeout) + assert.Equal(20*time.Second, transport.ResponseHeaderTimeout) assert.False(transport.DisableKeepAlives) assert.True(transport.DisableCompression) // Request compression disabled to prevent "trailing garbage" errors assert.Equal(4096, transport.WriteBufferSize) @@ -40,7 +40,7 @@ func (suite *Tests) TestBaseClient_createHttpClient() { httpClient := client.createHttpClient() assert.NotNil(httpClient) - assert.Equal(30*time.Second, httpClient.Timeout) + assert.Equal(60*time.Second, httpClient.Timeout) assert.NotNil(httpClient.Transport) // Check that it's using HTTP/2 transport @@ -49,9 +49,9 @@ func (suite *Tests) TestBaseClient_createHttpClient() { assert.True(transport.AllowHTTP) assert.NotNil(transport.TLSClientConfig) assert.True(transport.TLSClientConfig.InsecureSkipVerify) - assert.Equal(30*time.Second, transport.ReadIdleTimeout) - assert.Equal(10*time.Second, transport.PingTimeout) - assert.Equal(10*time.Second, transport.WriteByteTimeout) + assert.Equal(60*time.Second, transport.ReadIdleTimeout) + assert.Equal(20*time.Second, transport.PingTimeout) + assert.Equal(20*time.Second, transport.WriteByteTimeout) }) suite.T().Run("should handle invalid endpoints", func(t *testing.T) { @@ -105,8 +105,8 @@ func (suite *Tests) TestBaseClient_createHttpClient_transportSettings() { assert.Equal(100, transport.MaxIdleConns) assert.Equal(50, transport.MaxConnsPerHost) assert.Equal(10, transport.MaxIdleConnsPerHost) - assert.Equal(30*time.Second, transport.IdleConnTimeout) - assert.Equal(10*time.Second, transport.ResponseHeaderTimeout) + assert.Equal(60*time.Second, transport.IdleConnTimeout) + assert.Equal(20*time.Second, transport.ResponseHeaderTimeout) assert.False(transport.DisableKeepAlives) assert.True(transport.DisableCompression) // Request compression disabled to prevent "trailing garbage" errors assert.Equal(4096, transport.WriteBufferSize) @@ -124,9 +124,9 @@ func (suite *Tests) TestBaseClient_createHttpClient_transportSettings() { assert.True(transport.AllowHTTP) assert.NotNil(transport.TLSClientConfig) assert.True(transport.TLSClientConfig.InsecureSkipVerify) - assert.Equal(30*time.Second, transport.ReadIdleTimeout) - assert.Equal(10*time.Second, transport.PingTimeout) - assert.Equal(10*time.Second, transport.WriteByteTimeout) + assert.Equal(60*time.Second, transport.ReadIdleTimeout) + assert.Equal(20*time.Second, transport.PingTimeout) + assert.Equal(20*time.Second, transport.WriteByteTimeout) }) }