I don't think we can handle all 3xx responses in the same way.
Judging from http://tools.ietf.org/html/rfc2616#section-10.3 I'd say we should handle the responses like this:

Status **300**: Never follow a potentially existing `Location` header, always return to the user as is.

Status **301**: Here the spec says: "If the 301 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..."!

Status **302**: Spec: "If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request..."!

Status **303**: Spec: "The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource."

Status **304**: No redirection required.

Status **305**: Theoretically we could support it, but I see it as outside of the scope of this PR. Let's add a ticket for it.

Status **307**: Spec: "If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request"