Clear Content-Length header from redirected requests (#394)
This PR removes the Content-Length header from subsequent redirect requests if set. A test verifies the new behaviour.
This commit is contained in:
@@ -146,6 +146,23 @@ fn redirect_post() {
|
|||||||
assert_eq!(resp.header("x-foo").unwrap(), "bar");
|
assert_eq!(resp.header("x-foo").unwrap(), "bar");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn redirect_post_with_data() {
|
||||||
|
test::set_handler("/redirect_post1", |unit| {
|
||||||
|
assert_eq!(unit.header("Content-Length").unwrap(), "4");
|
||||||
|
test::make_response(302, "Go here", vec!["Location: /redirect_post2"], vec![])
|
||||||
|
});
|
||||||
|
test::set_handler("/redirect_post2", |unit| {
|
||||||
|
assert_eq!(unit.header("Content-Length"), None);
|
||||||
|
assert_eq!(unit.method, "GET");
|
||||||
|
test::make_response(200, "OK", vec![], vec![])
|
||||||
|
});
|
||||||
|
let resp = post("test://host/redirect_post1")
|
||||||
|
.send_string("data")
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(resp.status(), 200);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn redirect_308() {
|
fn redirect_308() {
|
||||||
test::set_handler("/redirect_get3", |_| {
|
test::set_handler("/redirect_get3", |_| {
|
||||||
|
|||||||
@@ -205,6 +205,8 @@ pub(crate) fn connect(
|
|||||||
debug!("redirect {} {} -> {}", resp.status(), url, new_url);
|
debug!("redirect {} {} -> {}", resp.status(), url, new_url);
|
||||||
history.push(unit.url.to_string());
|
history.push(unit.url.to_string());
|
||||||
body = Payload::Empty.into_read();
|
body = Payload::Empty.into_read();
|
||||||
|
unit.headers.retain(|h| h.name() != "Content-Length");
|
||||||
|
|
||||||
// recreate the unit to get a new hostname and cookies for the new host.
|
// recreate the unit to get a new hostname and cookies for the new host.
|
||||||
unit = Unit::new(
|
unit = Unit::new(
|
||||||
&unit.agent,
|
&unit.agent,
|
||||||
|
|||||||
Reference in New Issue
Block a user