fix(rustproxy-http): disable HTTP/3 GREASE for client and server connections

This commit is contained in:
2026-03-20 07:48:26 +00:00
parent bfcf92a855
commit 7217e15649
4 changed files with 15 additions and 3 deletions

View File

@@ -1,5 +1,11 @@
# Changelog # Changelog
## 2026-03-20 - 25.17.6 - fix(rustproxy-http)
disable HTTP/3 GREASE for client and server connections
- Switch the HTTP/3 server connection setup to use the builder API with send_grease(false)
- Switch the HTTP/3 client handshake to use the builder API with send_grease(false) to improve compatibility
## 2026-03-20 - 25.17.5 - fix(rustproxy) ## 2026-03-20 - 25.17.5 - fix(rustproxy)
add HTTP/3 integration test for QUIC response stream FIN handling add HTTP/3 integration test for QUIC response stream FIN handling

View File

@@ -75,7 +75,9 @@ impl H3ProxyService {
debug!("HTTP/3 connection from {} on port {}", remote_addr, port); debug!("HTTP/3 connection from {} on port {}", remote_addr, port);
let mut h3_conn: h3::server::Connection<h3_quinn::Connection, Bytes> = let mut h3_conn: h3::server::Connection<h3_quinn::Connection, Bytes> =
h3::server::Connection::new(h3_quinn::Connection::new(connection)) h3::server::builder()
.send_grease(false)
.build(h3_quinn::Connection::new(connection))
.await .await
.map_err(|e| anyhow::anyhow!("H3 connection setup failed: {}", e))?; .map_err(|e| anyhow::anyhow!("H3 connection setup failed: {}", e))?;

View File

@@ -2550,7 +2550,11 @@ impl HttpProxyService {
backend_key: &str, backend_key: &str,
) -> Result<Response<BoxBody<Bytes, hyper::Error>>, hyper::Error> { ) -> Result<Response<BoxBody<Bytes, hyper::Error>>, hyper::Error> {
let h3_quinn_conn = h3_quinn::Connection::new(quic_conn.clone()); let h3_quinn_conn = h3_quinn::Connection::new(quic_conn.clone());
let (mut driver, mut send_request) = match h3::client::new(h3_quinn_conn).await { let (mut driver, mut send_request) = match h3::client::builder()
.send_grease(false)
.build(h3_quinn_conn)
.await
{
Ok(pair) => pair, Ok(pair) => pair,
Err(e) => { Err(e) => {
error!(backend = %backend_key, domain = %domain, error = %e, "H3 client handshake failed"); error!(backend = %backend_key, domain = %domain, error = %e, "H3 client handshake failed");

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartproxy', name: '@push.rocks/smartproxy',
version: '25.17.5', version: '25.17.6',
description: 'A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.' description: 'A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.'
} }