On Fri, Oct 11, 2019 at 10:30 AM <micha...@apache.org> wrote: > This is an automated email from the ASF dual-hosted git repository. > > michaelo pushed a commit to branch BZ-63835/8.5.x > in repository https://gitbox.apache.org/repos/asf/tomcat.git > > commit 6ff2233cbbd27c9c2c649208a21931e5f3e132a6 > Author: Michael Osipov <micha...@apache.org> > AuthorDate: Fri Oct 11 10:30:08 2019 +0200 > > First draft >
+ if (keepAliveTimeout > 0) { + String value = "timeout=" + TimeUnit.MILLISECONDS.toSeconds(keepAliveTimeout); + + if (maxKeepAliveRequests > 0) { + value += ", max=" + maxKeepAliveRequests; + } StringBuilder ? Can you add a new flag controlling the feature ? The information may not be very useful in many cases such as when proxying, so it would be better to skip generating it by default. Rémy > --- > java/org/apache/coyote/http11/Http11Processor.java | 36 > ++++++++++++++++++---- > 1 file changed, 30 insertions(+), 6 deletions(-) > > diff --git a/java/org/apache/coyote/http11/Http11Processor.java > b/java/org/apache/coyote/http11/Http11Processor.java > index 6072602..3182bb7 100644 > --- a/java/org/apache/coyote/http11/Http11Processor.java > +++ b/java/org/apache/coyote/http11/Http11Processor.java > @@ -23,6 +23,7 @@ import java.util.Enumeration; > import java.util.Locale; > import java.util.Map; > import java.util.Set; > +import java.util.concurrent.TimeUnit; > import java.util.regex.Pattern; > > import javax.servlet.http.HttpServletResponse; > @@ -1307,7 +1308,7 @@ public class Http11Processor extends > AbstractProcessor { > } else { > // If the response code supports an entity body and we're on > // HTTP 1.1 then we chunk unless we have a Connection: close > header > - connectionClosePresent = isConnectionClose(headers); > + connectionClosePresent = isConnectionValue(headers, > Constants.CLOSE); > if (entityBody && http11 && !connectionClosePresent) { > outputBuffer.addActiveFilter > (outputFilters[Constants.CHUNKED_FILTER]); > @@ -1369,10 +1370,33 @@ public class Http11Processor extends > AbstractProcessor { > headers.addValue(Constants.CONNECTION).setString( > Constants.CLOSE); > } > - } else if (!http11 && !getErrorState().isError()) { > - > headers.addValue(Constants.CONNECTION).setString(Constants.KEEPALIVE); > - } > + } else if (!getErrorState().isError()) { > + if (!http11) { > + > headers.addValue(Constants.CONNECTION).setString(Constants.KEEPALIVE); > + } > + > + boolean connectionKeepAlivePresent = > + isConnectionValue(request.getMimeHeaders(), > Constants.KEEPALIVE); > + > + if (connectionKeepAlivePresent) { > + int keepAliveTimeout = endpoint.getKeepAliveTimeout(); > + int maxKeepAliveRequests = getMaxKeepAliveRequests(); > + > + if (keepAliveTimeout > 0) { > + String value = "timeout=" + > TimeUnit.MILLISECONDS.toSeconds(keepAliveTimeout); > + > + if (maxKeepAliveRequests > 0) { > + value += ", max=" + maxKeepAliveRequests; > + } > > + headers.setValue("Keep-Alive").setString(value); > + } > + > + if (http11) { > + > headers.addValue(Constants.CONNECTION).setString(Constants.KEEPALIVE); > + } > + } > + } > // Add server header > if (server == null) { > if (serverRemoveAppProvidedValues) { > @@ -1403,12 +1427,12 @@ public class Http11Processor extends > AbstractProcessor { > outputBuffer.commit(); > } > > - private static boolean isConnectionClose(MimeHeaders headers) { > + private static boolean isConnectionValue(MimeHeaders headers, String > value) { > MessageBytes connection = headers.getValue(Constants.CONNECTION); > if (connection == null) { > return false; > } > - return connection.equals(Constants.CLOSE); > + return connection.equals(value); > } > > private void prepareSendfile(OutputFilter[] outputFilters) { > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > >