Skip to content

Commit 80bdcb4

Browse files
committed
Drop body when redirecting, close AsyncHttpClient#898
1 parent b36438b commit 80bdcb4

File tree

1 file changed

+20
-15
lines changed
  • src/main/java/com/ning/http/client/providers/netty/handler

1 file changed

+20
-15
lines changed

src/main/java/com/ning/http/client/providers/netty/handler/Protocol.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,16 @@ public Protocol(ChannelManager channelManager, AsyncHttpClientConfig config, Net
8989

9090
private FluentCaseInsensitiveStringsMap propagatedHeaders(Request request, Realm realm, boolean switchToGet) {
9191

92-
FluentCaseInsensitiveStringsMap originalHeaders = request.getHeaders();
93-
originalHeaders.remove(HOST);
94-
originalHeaders.remove(CONTENT_LENGTH);
95-
if (switchToGet)
96-
originalHeaders.remove(CONTENT_TYPE);
92+
FluentCaseInsensitiveStringsMap headers = request.getHeaders()//
93+
.delete(HttpHeaders.Names.HOST)//
94+
.delete(HttpHeaders.Names.CONTENT_LENGTH)//
95+
.delete(HttpHeaders.Names.CONTENT_TYPE);
96+
9797
if (realm != null && realm.getScheme() == AuthScheme.NTLM) {
98-
originalHeaders.remove(AUTHORIZATION);
99-
originalHeaders.remove(PROXY_AUTHORIZATION);
98+
headers.delete(AUTHORIZATION)//
99+
.delete(PROXY_AUTHORIZATION);
100100
}
101-
return originalHeaders;
101+
return headers;
102102
}
103103

104104
protected boolean exitAfterHandlingRedirect(//
@@ -122,13 +122,18 @@ protected boolean exitAfterHandlingRedirect(//
122122
Uri uri = Uri.create(future.getUri(), location);
123123

124124
if (!uri.equals(future.getUri())) {
125-
final RequestBuilder requestBuilder = new RequestBuilder(future.getRequest());
126-
127-
// if we are to strictly handle 302, we should keep the original method (which browsers don't)
128-
// 303 must force GET
129-
boolean switchToGet = !request.getMethod().equals("GET") && (statusCode == 303 || (statusCode == 302 && !config.isStrict302Handling()));
130-
if (switchToGet)
131-
requestBuilder.setMethod("GET");
125+
String originalMethod = request.getMethod();
126+
boolean switchToGet = !originalMethod.equals("GET") && (statusCode == 303 || (statusCode == 302 && !config.isStrict302Handling()));
127+
128+
final RequestBuilder requestBuilder = new RequestBuilder(switchToGet ? "GET" : originalMethod)//
129+
.setConnectionPoolKeyStrategy(request.getConnectionPoolPartitioning())//
130+
.setInetAddress(request.getInetAddress())//
131+
.setLocalInetAddress(request.getLocalAddress())//
132+
.setVirtualHost(request.getVirtualHost())//
133+
.setProxyServer(request.getProxyServer())//
134+
.setRealm(request.getRealm());
135+
136+
requestBuilder.setHeaders(propagatedHeaders(request, realm, switchToGet));
132137

133138
// in case of a redirect from HTTP to HTTPS, future attributes might change
134139
final boolean initialConnectionKeepAlive = future.isKeepAlive();

0 commit comments

Comments
 (0)