@@ -117,67 +117,65 @@ protected boolean exitAfterHandlingRedirect(//
117
117
// We must allow 401 handling again.
118
118
future .getAndSetAuth (false );
119
119
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
+
120
141
HttpHeaders responseHeaders = response .headers ();
121
142
String location = responseHeaders .get (HttpHeaders .Names .LOCATION );
122
143
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
+ }
123
149
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 );
152
151
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
+ }
160
157
161
- final Request nextRequest = requestBuilder .setUrl ( newUrl ). build ( );
158
+ requestBuilder .setHeaders ( propagatedHeaders ( future . getRequest (), realm , switchToGet ) );
162
159
163
- logger . debug ( "Sending redirect to {}" , request . getUri () );
160
+ final Request nextRequest = requestBuilder . setUrl ( newUrl ). build ( );
164
161
165
- if ( future . isKeepAlive () && ! HttpHeaders . isTransferEncodingChunked ( response ) && ! response . isChunked ()) {
162
+ logger . debug ( "Sending redirect to {}" , request . getUri ());
166
163
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 ()) {
172
165
166
+ if (isSameHostAndProtocol (request .getUri (), nextRequest .getUri ())) {
167
+ future .setReuseChannel (true );
173
168
} else {
174
- // redirect + chunking = WAT
175
- channelManager .closeChannel (channel );
169
+ channelManager .drainChannelAndOffer (channel , future , initialConnectionKeepAlive , initialPartitionKey );
176
170
}
177
171
178
- requestSender .sendNextRequest (nextRequest , future );
179
- return true ;
172
+ } else {
173
+ // redirect + chunking = WAT
174
+ channelManager .closeChannel (channel );
180
175
}
176
+
177
+ requestSender .sendNextRequest (nextRequest , future );
178
+ return true ;
181
179
}
182
180
}
183
181
return false ;
0 commit comments