Only set nodelay for HTTPS if not already set (#783)

This commit is contained in:
Sean McArthur
2020-01-13 14:26:55 -08:00
committed by GitHub
parent e31d5221fe
commit 76ca042faf

View File

@@ -242,17 +242,23 @@ impl Connector {
Inner::DefaultTls(http, tls) => {
let mut http = http.clone();
http.set_nodelay(self.nodelay || (dst.scheme() == Some(&Scheme::HTTPS)));
// Disable Nagle's algorithm for TLS handshake
//
// https://www.openssl.org/docs/man1.1.1/man3/SSL_connect.html#NOTES
if !self.nodelay && (dst.scheme() == Some(&Scheme::HTTPS)) {
http.set_nodelay(true);
}
let tls_connector = tokio_tls::TlsConnector::from(tls.clone());
let mut http = hyper_tls::HttpsConnector::from((http, tls_connector));
let io = http.call(dst).await?;
//TODO: where's this at now?
//if let hyper_tls::MaybeHttpsStream::Https(_stream) = &io {
// if !no_delay {
// stream.set_nodelay(false)?;
// }
//}
if let hyper_tls::MaybeHttpsStream::Https(stream) = &io {
if !self.nodelay {
stream.get_ref().set_nodelay(false)?;
}
}
Ok(Conn {
inner: self.verbose.wrap(io),
@@ -266,7 +272,9 @@ impl Connector {
// Disable Nagle's algorithm for TLS handshake
//
// https://www.openssl.org/docs/man1.1.1/man3/SSL_connect.html#NOTES
http.set_nodelay(self.nodelay || (dst.scheme() == Some(&Scheme::HTTPS)));
if !self.nodelay && (dst.scheme() == Some(&Scheme::HTTPS)) {
http.set_nodelay(true);
}
let mut http = hyper_rustls::HttpsConnector::from((http, tls.clone()));
let io = http.call(dst).await?;
@@ -310,8 +318,7 @@ impl Connector {
if dst.scheme() == Some(&Scheme::HTTPS) {
let host = dst.host().to_owned();
let port = dst.port().map(|p| p.as_u16()).unwrap_or(443);
let mut http = http.clone();
http.set_nodelay(self.nodelay);
let http = http.clone();
let tls_connector = tokio_tls::TlsConnector::from(tls.clone());
let mut http = hyper_tls::HttpsConnector::from((http, tls_connector));
let conn = http.call(proxy_dst).await?;
@@ -350,8 +357,7 @@ impl Connector {
.ok_or("no host in url")?
.to_string();
let port = dst.port().map(|r| r.as_u16()).unwrap_or(443);
let mut http = http.clone();
http.set_nodelay(self.nodelay);
let http = http.clone();
let mut http = hyper_rustls::HttpsConnector::from((http, tls_proxy.clone()));
let tls = tls.clone();
let conn = http.call(proxy_dst).await?;