H2 headers must be lower case

This commit is contained in:
Carl Lerche
2017-08-25 11:44:19 -07:00
parent 91aa1db2ff
commit 9d45255c75
8 changed files with 41 additions and 28 deletions

View File

@@ -544,7 +544,7 @@ mod test {
use http::header::HeaderValue;
let name = "my-password".parse().unwrap();
let mut value = HeaderValue::try_from_bytes(b"12345").unwrap();
let mut value = HeaderValue::from_bytes(b"12345").unwrap();
value.set_sensitive(true);
let header = Header::Field { name: Some(name), value: value };
@@ -561,7 +561,7 @@ mod test {
// Now, try to encode a sensitive header w/ a name in the static table
let name = "authorization".parse().unwrap();
let mut value = HeaderValue::try_from_bytes(b"12345").unwrap();
let mut value = HeaderValue::from_bytes(b"12345").unwrap();
value.set_sensitive(true);
let header = Header::Field { name: Some(name), value: value };
@@ -579,7 +579,7 @@ mod test {
let _ = encode(&mut encoder, vec![self::header("my-password", "not-so-secret")]);
let name = "my-password".parse().unwrap();
let mut value = HeaderValue::try_from_bytes(b"12345").unwrap();
let mut value = HeaderValue::from_bytes(b"12345").unwrap();
value.set_sensitive(true);
let header = Header::Field { name: Some(name), value: value };
@@ -746,11 +746,11 @@ mod test {
let res = encode(&mut encoder, vec![
Header::Field {
name: Some("hello".parse().unwrap()),
value: HeaderValue::try_from_bytes(b"world").unwrap(),
value: HeaderValue::from_bytes(b"world").unwrap(),
},
Header::Field {
name: None,
value: HeaderValue::try_from_bytes(b"zomg").unwrap(),
value: HeaderValue::from_bytes(b"zomg").unwrap(),
},
]);
@@ -772,11 +772,11 @@ mod test {
let mut input = vec![
Header::Field {
name: Some("hello".parse().unwrap()),
value: HeaderValue::try_from_bytes(b"world").unwrap(),
value: HeaderValue::from_bytes(b"world").unwrap(),
},
Header::Field {
name: None,
value: HeaderValue::try_from_bytes(b"zomg").unwrap(),
value: HeaderValue::from_bytes(b"zomg").unwrap(),
},
].into_iter();
@@ -822,7 +822,7 @@ mod test {
use http::header::{HeaderName, HeaderValue};
let name = HeaderName::from_bytes(name.as_bytes()).unwrap();
let value = HeaderValue::try_from_bytes(val.as_bytes()).unwrap();
let value = HeaderValue::from_bytes(val.as_bytes()).unwrap();
Header::Field { name: Some(name), value: value }
}

View File

@@ -81,8 +81,9 @@ impl Header {
}
}
} else {
let name = try!(HeaderName::from_bytes(&name));
let value = try!(HeaderValue::try_from_bytes(&value));
// HTTP/2 requires lower case header names
let name = try!(HeaderName::from_lowercase(&name));
let value = try!(HeaderValue::from_bytes(&value));
Ok(Header::Field { name: name, value: value })
}
@@ -228,7 +229,7 @@ impl<'a> Name<'a> {
Name::Field(name) => {
Ok(Header::Field {
name: name.clone(),
value: try!(HeaderValue::try_from_bytes(&*value)),
value: try!(HeaderValue::from_bytes(&*value)),
})
}
Name::Authority => {

View File

@@ -330,7 +330,7 @@ fn gen_header_name(g: &mut StdRng) -> HeaderName {
fn gen_header_value(g: &mut StdRng) -> HeaderValue {
let value = gen_string(g, 0, 70);
HeaderValue::try_from_bytes(value.as_bytes()).unwrap()
HeaderValue::from_bytes(value.as_bytes()).unwrap()
}
fn gen_string(g: &mut StdRng, min: usize, max: usize) -> String {