From 46826ea75836852fac53ff075a12cba7e290946e Mon Sep 17 00:00:00 2001 From: Finn Bear Date: Thu, 30 Jan 2025 11:09:36 -0800 Subject: [PATCH] feat(server): support `auto_date_header`, `max_local_error_reset_streams`, and `ignore_invalid_headers`. (#161) --- Cargo.toml | 2 +- src/server/conn/auto/mod.rs | 45 +++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 9088a46..e4883e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ features = ["full"] rustdoc-args = ["--cfg", "docsrs"] [dependencies] -hyper = "1.4.0" +hyper = "1.6.0" futures-util = { version = "0.3.16", default-features = false } http = "1.0" http-body = "1.0.0" diff --git a/src/server/conn/auto/mod.rs b/src/server/conn/auto/mod.rs index b48b7cf..fdc377c 100644 --- a/src/server/conn/auto/mod.rs +++ b/src/server/conn/auto/mod.rs @@ -653,6 +653,16 @@ impl Http1Builder<'_, E> { Http2Builder { inner: self.inner } } + /// Set whether the `date` header should be included in HTTP responses. + /// + /// Note that including the `date` header is recommended by RFC 7231. + /// + /// Default is true. + pub fn auto_date_header(&mut self, enabled: bool) -> &mut Self { + self.inner.http1.auto_date_header(enabled); + self + } + /// Set whether HTTP/1 connections should support half-closures. /// /// Clients can chose to shutdown their write-side while waiting @@ -685,6 +695,18 @@ impl Http1Builder<'_, E> { self } + /// Set whether HTTP/1 connections will silently ignored malformed header lines. + /// + /// If this is enabled and a header line does not start with a valid header + /// name, or does not include a colon at all, the line will be silently ignored + /// and no error will be reported. + /// + /// Default is false. + pub fn ignore_invalid_headers(&mut self, enabled: bool) -> &mut Self { + self.inner.http1.ignore_invalid_headers(enabled); + self + } + /// Set whether to support preserving original header cases. /// /// Currently, this will record the original cases received, and store them @@ -861,6 +883,19 @@ impl Http2Builder<'_, E> { self } + /// Configures the maximum number of local reset streams allowed before a GOAWAY will be sent. + /// + /// If not set, hyper will use a default, currently of 1024. + /// + /// If `None` is supplied, hyper will not apply any limit. + /// This is not advised, as it can potentially expose servers to DOS vulnerabilities. + /// + /// See for more information. + pub fn max_local_error_reset_streams(&mut self, max: impl Into>) -> &mut Self { + self.inner.http2.max_local_error_reset_streams(max); + self + } + /// Sets the [`SETTINGS_INITIAL_WINDOW_SIZE`][spec] option for HTTP2 /// stream-level flow control. /// @@ -980,6 +1015,16 @@ impl Http2Builder<'_, E> { self } + /// Set whether the `date` header should be included in HTTP responses. + /// + /// Note that including the `date` header is recommended by RFC 7231. + /// + /// Default is true. + pub fn auto_date_header(&mut self, enabled: bool) -> &mut Self { + self.inner.http2.auto_date_header(enabled); + self + } + /// Bind a connection together with a [`Service`]. pub async fn serve_connection(&self, io: I, service: S) -> Result<()> where