Skip to content

Commit

Permalink
Don't send "Connection: close" on HTTP/1.0, close #910
Browse files Browse the repository at this point in the history
  • Loading branch information
slandelle committed Jun 4, 2015
1 parent b8175e6 commit e2c15f8
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 21 deletions.
Expand Up @@ -172,4 +172,13 @@ protected String systematicAuthorizationHeader(Request request, Uri uri, Realm r

return authorizationHeader;
}

protected String connectionHeader(boolean allowConnectionPooling, boolean http11) {
if (allowConnectionPooling)
return "keep-alive";
else if (http11)
return "close";
else
return null;
}
}
Expand Up @@ -37,10 +37,8 @@ public class AsyncHttpProviderUtils {

public static final void validateSupportedScheme(Uri uri) {
final String scheme = uri.getScheme();
if (scheme == null || !scheme.equalsIgnoreCase("http") && !scheme.equalsIgnoreCase("https") && !scheme.equalsIgnoreCase("ws")
&& !scheme.equalsIgnoreCase("wss")) {
throw new IllegalArgumentException("The URI scheme, of the URI " + uri
+ ", must be equal (ignoring case) to 'http', 'https', 'ws', or 'wss'");
if (scheme == null || !scheme.equalsIgnoreCase("http") && !scheme.equalsIgnoreCase("https") && !scheme.equalsIgnoreCase("ws") && !scheme.equalsIgnoreCase("wss")) {
throw new IllegalArgumentException("The URI scheme, of the URI " + uri + ", must be equal (ignoring case) to 'http', 'https', 'ws', or 'wss'");
}
}

Expand All @@ -49,14 +47,12 @@ public final static String getBaseUrl(Uri uri) {
}

public final static String getAuthority(Uri uri) {
int port = uri.getPort() != -1? uri.getPort() : getDefaultPort(uri);
int port = uri.getPort() != -1 ? uri.getPort() : getDefaultPort(uri);
return uri.getHost() + ":" + port;
}

public final static boolean isSameHostAndProtocol(Uri uri1, Uri uri2) {
return uri1.getScheme().equals(uri2.getScheme())
&& uri1.getHost().equals(uri2.getHost())
&& getDefaultPort(uri1) == getDefaultPort(uri2);
return uri1.getScheme().equals(uri2.getScheme()) && uri1.getHost().equals(uri2.getHost()) && getDefaultPort(uri1) == getDefaultPort(uri2);
}

public static final int getSchemeDefaultPort(String scheme) {
Expand Down Expand Up @@ -98,16 +94,12 @@ public static Charset parseCharset(String contentType) {
return null;
}

public static String keepAliveHeaderValue(AsyncHttpClientConfig config) {
return config.isAllowPoolingConnections() ? "keep-alive" : "close";
}

public static int requestTimeout(AsyncHttpClientConfig config, Request request) {
return request.getRequestTimeout() != 0 ? request.getRequestTimeout() : config.getRequestTimeout();
}

public static boolean followRedirect(AsyncHttpClientConfig config, Request request) {
return request.getFollowRedirect() != null? request.getFollowRedirect().booleanValue() : config.isFollowRedirect();
return request.getFollowRedirect() != null ? request.getFollowRedirect().booleanValue() : config.isFollowRedirect();
}

private static StringBuilder urlEncodeFormParams0(List<Param> params) {
Expand All @@ -118,7 +110,7 @@ private static StringBuilder urlEncodeFormParams0(List<Param> params) {
sb.setLength(sb.length() - 1);
return sb;
}

public static ByteBuffer urlEncodeFormParams(List<Param> params, Charset charset) {
return StringUtils.charSequence2ByteBuffer(urlEncodeFormParams0(params), charset);
}
Expand All @@ -131,7 +123,7 @@ private static void encodeAndAppendFormParam(final StringBuilder sb, final CharS
}
sb.append('&');
}

public static String hostHeader(Request request, Uri uri) {
String virtualHost = request.getVirtualHost();
if (virtualHost != null)
Expand Down
Expand Up @@ -15,7 +15,6 @@

import static org.asynchttpclient.util.AsyncHttpProviderUtils.DEFAULT_CHARSET;
import static org.asynchttpclient.util.AsyncHttpProviderUtils.hostHeader;
import static org.asynchttpclient.util.AsyncHttpProviderUtils.keepAliveHeaderValue;
import static org.asynchttpclient.util.AsyncHttpProviderUtils.urlEncodeFormParams;
import static org.asynchttpclient.util.HttpUtils.isSecure;
import static org.asynchttpclient.util.HttpUtils.isWebSocket;
Expand Down Expand Up @@ -44,6 +43,7 @@
import org.asynchttpclient.request.body.generator.FileBodyGenerator;
import org.asynchttpclient.request.body.generator.InputStreamBodyGenerator;
import org.asynchttpclient.uri.Uri;
import org.asynchttpclient.util.HttpUtils;
import org.asynchttpclient.util.StringUtils;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.handler.codec.http.DefaultHttpRequest;
Expand Down Expand Up @@ -127,8 +127,10 @@ public NettyRequest newNettyRequest(Request request, Uri uri, boolean forceConne

HttpMethod method = forceConnect ? HttpMethod.CONNECT : HttpMethod.valueOf(request.getMethod());
boolean connect = method == HttpMethod.CONNECT;

HttpVersion httpVersion = connect && proxyServer.isForceHttp10() ? HttpVersion.HTTP_1_0 : HttpVersion.HTTP_1_1;

boolean allowConnectionPooling = config.isAllowPoolingConnections() && (!HttpUtils.isSecure(uri) || config.isAllowPoolingSslConnections());

HttpVersion httpVersion = !allowConnectionPooling || (connect && proxyServer.isForceHttp10()) ? HttpVersion.HTTP_1_0 : HttpVersion.HTTP_1_1;
String requestUri = requestUri(uri, proxyServer, connect);

NettyBody body = body(request, connect);
Expand Down Expand Up @@ -183,7 +185,9 @@ public NettyRequest newNettyRequest(Request request, Uri uri, boolean forceConne
.set(HttpHeaders.Names.SEC_WEBSOCKET_VERSION, "13");

} else if (!headers.contains(HttpHeaders.Names.CONNECTION)) {
headers.set(HttpHeaders.Names.CONNECTION, keepAliveHeaderValue(config));
String connectionHeaderValue = connectionHeader(allowConnectionPooling, httpVersion == HttpVersion.HTTP_1_1);
if (connectionHeaderValue != null)
headers.set(HttpHeaders.Names.CONNECTION, connectionHeaderValue);
}

if (!headers.contains(HttpHeaders.Names.HOST))
Expand Down
Expand Up @@ -15,7 +15,6 @@

import static org.asynchttpclient.util.AsyncHttpProviderUtils.DEFAULT_CHARSET;
import static org.asynchttpclient.util.AsyncHttpProviderUtils.hostHeader;
import static org.asynchttpclient.util.AsyncHttpProviderUtils.keepAliveHeaderValue;
import static org.asynchttpclient.util.AsyncHttpProviderUtils.urlEncodeFormParams;
import static org.asynchttpclient.util.HttpUtils.isSecure;
import static org.asynchttpclient.util.HttpUtils.isWebSocket;
Expand Down Expand Up @@ -187,7 +186,9 @@ public NettyRequest newNettyRequest(Request request, Uri uri, boolean forceConne
.set(HttpHeaders.Names.SEC_WEBSOCKET_VERSION, "13");

} else if (!headers.contains(HttpHeaders.Names.CONNECTION)) {
headers.set(HttpHeaders.Names.CONNECTION, keepAliveHeaderValue(config));
String connectionHeaderValue = connectionHeader(allowConnectionPooling, httpVersion == HttpVersion.HTTP_1_1);
if (connectionHeaderValue != null)
headers.set(HttpHeaders.Names.CONNECTION, connectionHeaderValue);
}

if (!headers.contains(HttpHeaders.Names.HOST))
Expand Down

0 comments on commit e2c15f8

Please sign in to comment.