// Redirect behavior:
redirectMethod string
- includeBody bool
+ includeBody = true
)
uerr := func(err error) error {
// the body may have been closed already by c.send()
return nil, uerr(err)
}
- var shouldRedirect bool
- redirectMethod, shouldRedirect, includeBody = redirectBehavior(req.Method, resp, reqs[0])
+ var shouldRedirect, includeBodyOnHop bool
+ redirectMethod, shouldRedirect, includeBodyOnHop = redirectBehavior(req.Method, resp, reqs[0])
if !shouldRedirect {
return resp, nil
}
+ if !includeBodyOnHop {
+ // Once a hop drops the body, we never send it again
+ // (because we're now handling a redirect for a request with no body).
+ includeBody = false
+ }
req.closeBody()
}
`POST /?code=307&next=303,308,302 "c307"`,
`POST /?code=303&next=308,302 "c307"`,
`GET /?code=308&next=302 ""`,
- `GET /?code=302 "c307"`,
+ `GET /?code=302 ""`,
`GET / ""`,
`POST /?code=308&next=302,301 "c308"`,
`POST /?code=302&next=301 "c308"`,
`DELETE /?code=301&next=302,308 "c301"`,
`GET /?code=302&next=308 ""`,
`GET /?code=308 ""`,
- `GET / "c301"`,
+ `GET / ""`,
`DELETE /?code=302&next=302 "c302"`,
`GET /?code=302 ""`,
`GET / ""`,
`DELETE /?code=307&next=301,308,303,302,304 "c307"`,
`DELETE /?code=301&next=308,303,302,304 "c307"`,
`GET /?code=308&next=303,302,304 ""`,
- `GET /?code=303&next=302,304 "c307"`,
+ `GET /?code=303&next=302,304 ""`,
`GET /?code=302&next=304 ""`,
`GET /?code=304 ""`,
`DELETE /?code=308&next=307 "c308"`,