in src/main/java/com/twitter/whiskey/net/SpdyStream.java [358:391]
void onStatus(int statusCode) throws IOException {
if (finalResponse) {
throw new ProtocolException("unexpected second response status received: " + statusCode);
}
this.statusCode = statusCode;
if (statusCode >= 300 && statusCode < 400 && operation.getRemainingRedirects() > 0) {
Request currentRequest = operation.getCurrentRequest();
Request.Method currentMethod = currentRequest.getMethod();
if (statusCode == 301 || statusCode == 307) {
/* RFC 2616: If the [status code] is received in response to a request other than
* GET or HEAD, the user agent MUST NOT automatically redirect the request unless
* it can be confirmed by the user, since this might change the conditions under
* which the request was issued.
*/
if (currentMethod == Request.Method.GET || currentMethod == Request.Method.HEAD) {
redirectMethod = currentMethod;
} else {
finalizeResponse();
}
} else if (statusCode == 302 || statusCode == 303) {
/*
* This implementation follows convention over specification by changing the request
* method to GET on a 302 redirect. Note this behavior violates RFC 1945, 2068,
* and 2616, but is also expected by most servers and clients.
*/
redirectMethod = Request.Method.GET;
}
} else if (statusCode != 100) {
finalizeResponse();
}
}