[SCB-2684]fix idle time out and keep alive timeout not properly set problem (#3346)

diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java
index 2e7d630..d7b5c3c 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java
@@ -130,7 +130,11 @@
 
   @Override
   public int getKeepAliveTimeout() {
-    return HttpClientOptions.DEFAULT_KEEP_ALIVE_TIMEOUT;
+    int result = getIdleTimeoutInSeconds();
+    if (result > 1) {
+      return result - 1;
+    }
+    return result;
   }
 
   @Override
diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java
index e3a0e02..ab7a963 100644
--- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java
+++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java
@@ -128,7 +128,7 @@
 
   @Override
   public int getKeepAliveTimeout() {
-    return TransportClientConfig.getConnectionIdleTimeoutInSeconds();
+    return TransportClientConfig.getConnectionKeepAliveTimeoutInSeconds();
   }
 
   @Override
diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
index 20843ed..d855d4e 100644
--- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
+++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
@@ -93,6 +93,21 @@
         .get();
   }
 
+  public static int getConnectionKeepAliveTimeoutInSeconds() {
+    int result = DynamicPropertyFactory.getInstance()
+        .getIntProperty("servicecomb.rest.client.connection.keepAliveTimeoutInSeconds",
+            -1)
+        .get();
+    if (result >= 0) {
+      return result;
+    }
+    result = getConnectionIdleTimeoutInSeconds();
+    if (result > 1) {
+      return result - 1; // a bit shorter than ConnectionIdleTimeoutInSeconds
+    }
+    return result;
+  }
+
   public static boolean getConnectionCompression() {
     return DynamicPropertyFactory.getInstance()
         .getBooleanProperty("servicecomb.rest.client.connection.compression",