Skip to content

Commit caac827

Browse files
committed
Remove the checking of "redirecting to the same url", backport #917
1 parent cecb5f5 commit caac827

File tree

1 file changed

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

1 file changed

+45
-47
lines changed

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

Lines changed: 45 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -117,67 +117,65 @@ protected boolean exitAfterHandlingRedirect(//
117117
// We must allow 401 handling again.
118118
future.getAndSetAuth(false);
119119

120+
String originalMethod = request.getMethod();
121+
boolean switchToGet = !originalMethod.equals("GET")
122+
&& (statusCode == 303 || (statusCode == 302 && !config.isStrict302Handling()));
123+
124+
final RequestBuilder requestBuilder = new RequestBuilder(switchToGet ? "GET" : originalMethod)//
125+
.setCookies(request.getCookies())//
126+
.setConnectionPoolKeyStrategy(request.getConnectionPoolPartitioning())//
127+
.setFollowRedirects(true)//
128+
.setLocalInetAddress(request.getLocalAddress())//
129+
.setNameResolver(request.getNameResolver())//
130+
.setProxyServer(request.getProxyServer())//
131+
.setRealm(request.getRealm())//
132+
.setRequestTimeout(request.getRequestTimeout())//
133+
.setVirtualHost(request.getVirtualHost());
134+
135+
requestBuilder.setHeaders(propagatedHeaders(request, realm, switchToGet));
136+
137+
// in case of a redirect from HTTP to HTTPS, future attributes might change
138+
final boolean initialConnectionKeepAlive = future.isKeepAlive();
139+
final Object initialPartitionKey = future.getPartitionKey();
140+
120141
HttpHeaders responseHeaders = response.headers();
121142
String location = responseHeaders.get(HttpHeaders.Names.LOCATION);
122143
Uri uri = Uri.create(future.getUri(), location);
144+
future.setUri(uri);
145+
String newUrl = uri.toUrl();
146+
if (request.getUri().getScheme().startsWith(WEBSOCKET)) {
147+
newUrl = newUrl.replaceFirst(HTTP, WEBSOCKET);
148+
}
123149

124-
if (!uri.equals(future.getUri())) {
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-
.setCookies(request.getCookies())//
130-
.setConnectionPoolKeyStrategy(request.getConnectionPoolPartitioning())//
131-
.setFollowRedirects(true)//
132-
.setLocalInetAddress(request.getLocalAddress())//
133-
.setNameResolver(request.getNameResolver())//
134-
.setProxyServer(request.getProxyServer())//
135-
.setRealm(request.getRealm())//
136-
.setRequestTimeout(request.getRequestTimeout())//
137-
.setVirtualHost(request.getVirtualHost());
138-
139-
requestBuilder.setHeaders(propagatedHeaders(request, realm, switchToGet));
140-
141-
// in case of a redirect from HTTP to HTTPS, future attributes might change
142-
final boolean initialConnectionKeepAlive = future.isKeepAlive();
143-
final Object initialPartitionKey = future.getPartitionKey();
144-
145-
future.setUri(uri);
146-
String newUrl = uri.toUrl();
147-
if (request.getUri().getScheme().startsWith(WEBSOCKET)) {
148-
newUrl = newUrl.replaceFirst(HTTP, WEBSOCKET);
149-
}
150-
151-
logger.debug("Redirecting to {}", newUrl);
150+
logger.debug("Redirecting to {}", newUrl);
152151

153-
for (String cookieStr : responseHeaders.getAll(HttpHeaders.Names.SET_COOKIE)) {
154-
Cookie c = CookieDecoder.decode(cookieStr);
155-
if (c != null)
156-
requestBuilder.addOrReplaceCookie(c);
157-
}
158-
159-
requestBuilder.setHeaders(propagatedHeaders(future.getRequest(), realm, switchToGet));
152+
for (String cookieStr : responseHeaders.getAll(HttpHeaders.Names.SET_COOKIE)) {
153+
Cookie c = CookieDecoder.decode(cookieStr);
154+
if (c != null)
155+
requestBuilder.addOrReplaceCookie(c);
156+
}
160157

161-
final Request nextRequest = requestBuilder.setUrl(newUrl).build();
158+
requestBuilder.setHeaders(propagatedHeaders(future.getRequest(), realm, switchToGet));
162159

163-
logger.debug("Sending redirect to {}", request.getUri());
160+
final Request nextRequest = requestBuilder.setUrl(newUrl).build();
164161

165-
if (future.isKeepAlive() && !HttpHeaders.isTransferEncodingChunked(response) && !response.isChunked()) {
162+
logger.debug("Sending redirect to {}", request.getUri());
166163

167-
if (isSameHostAndProtocol(request.getUri(), nextRequest.getUri())) {
168-
future.setReuseChannel(true);
169-
} else {
170-
channelManager.drainChannelAndOffer(channel, future, initialConnectionKeepAlive, initialPartitionKey);
171-
}
164+
if (future.isKeepAlive() && !HttpHeaders.isTransferEncodingChunked(response) && !response.isChunked()) {
172165

166+
if (isSameHostAndProtocol(request.getUri(), nextRequest.getUri())) {
167+
future.setReuseChannel(true);
173168
} else {
174-
// redirect + chunking = WAT
175-
channelManager.closeChannel(channel);
169+
channelManager.drainChannelAndOffer(channel, future, initialConnectionKeepAlive, initialPartitionKey);
176170
}
177171

178-
requestSender.sendNextRequest(nextRequest, future);
179-
return true;
172+
} else {
173+
// redirect + chunking = WAT
174+
channelManager.closeChannel(channel);
180175
}
176+
177+
requestSender.sendNextRequest(nextRequest, future);
178+
return true;
181179
}
182180
}
183181
return false;

0 commit comments

Comments
 (0)