diff --git a/src/frame/headers.rs b/src/frame/headers.rs index b65951c..979ac70 100644 --- a/src/frame/headers.rs +++ b/src/frame/headers.rs @@ -552,15 +552,19 @@ impl Pseudo { .map(|v| Bytes::copy_from_slice(v.as_str().as_bytes())) .unwrap_or_else(Bytes::new); - if path.is_empty() && method != Method::OPTIONS { - path = Bytes::from_static(b"/"); + match method { + Method::OPTIONS | Method::CONNECT => {} + _ if path.is_empty() => { + path = Bytes::from_static(b"/"); + } + _ => {} } let mut pseudo = Pseudo { method: Some(method), scheme: None, authority: None, - path: Some(unsafe { BytesStr::from_utf8_unchecked(path) }), + path: Some(unsafe { BytesStr::from_utf8_unchecked(path) }).filter(|p| !p.is_empty()), status: None, }; diff --git a/tests/h2-tests/tests/server.rs b/tests/h2-tests/tests/server.rs index 4be7090..03ce43f 100644 --- a/tests/h2-tests/tests/server.rs +++ b/tests/h2-tests/tests/server.rs @@ -114,7 +114,7 @@ async fn serve_connect() { let settings = client.assert_server_handshake().await; assert_default_settings!(settings); client - .send_frame(frames::headers(1).method("CONNECT").eos()) + .send_frame(frames::headers(1).request("CONNECT", "localhost").eos()) .await; client .recv_frame(frames::headers(1).response(200).eos())