@@ -9,6 +9,8 @@ use std::{
99use bytes:: { Buf , BytesMut } ;
1010use futures_util:: future;
1111use http:: request;
12+ use http:: HeaderMap ;
13+ use http:: HeaderName ;
1214use tracing:: { info, trace} ;
1315
1416use crate :: {
@@ -142,7 +144,19 @@ where
142144 extensions,
143145 ..
144146 } = parts;
145- let headers = Header :: request ( method, uri, headers, extensions) ?;
147+
148+ //= https://www.rfc-editor.org/rfc/rfc9114#section-4.2
149+ //# Characters in field names MUST be
150+ //# converted to lowercase prior to their encoding.
151+ let mut lower_headers = HeaderMap :: new ( ) ;
152+
153+ for ( n, v) in headers. iter ( ) {
154+ lower_headers. append (
155+ HeaderName :: from_lowercase ( n. as_str ( ) . to_ascii_lowercase ( ) . as_bytes ( ) ) . unwrap ( ) ,
156+ v. clone ( ) ,
157+ ) ;
158+ }
159+ let headers = Header :: request ( method, uri, lower_headers, extensions) ?;
146160
147161 //= https://www.rfc-editor.org/rfc/rfc9114#section-4.1
148162 //= type=implication
@@ -152,11 +166,6 @@ where
152166 . await
153167 . map_err ( |e| self . maybe_conn_err ( e) ) ?;
154168
155- //= https://www.rfc-editor.org/rfc/rfc9114#section-4.2
156- //= type=TODO
157- //# Characters in field names MUST be
158- //# converted to lowercase prior to their encoding.
159-
160169 //= https://www.rfc-editor.org/rfc/rfc9114#section-4.2.1
161170 //= type=TODO
162171 //# To allow for better compression efficiency, the Cookie header field
0 commit comments