diff --git a/async-http.gemspec b/async-http.gemspec index e8a98fe..8d4ad55 100644 --- a/async-http.gemspec +++ b/async-http.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |spec| spec.add_dependency "io-stream", "~> 0.6" spec.add_dependency "metrics", "~> 0.12" spec.add_dependency "protocol-http", "~> 0.58" - spec.add_dependency "protocol-http1", "~> 0.36" + spec.add_dependency "protocol-http1", "~> 0.37" spec.add_dependency "protocol-http2", "~> 0.22" spec.add_dependency "protocol-url", "~> 0.2" spec.add_dependency "traces", "~> 0.10" diff --git a/lib/async/http/protocol/http1/server.rb b/lib/async/http/protocol/http1/server.rb index ca65e2c..22de906 100644 --- a/lib/async/http/protocol/http1/server.rb +++ b/lib/async/http/protocol/http1/server.rb @@ -53,7 +53,7 @@ def next_request end return request - rescue ::Protocol::HTTP1::BadRequest + rescue ::Protocol::HTTP::BadRequest fail_request(400) # Conceivably we could retry here, but we don't really know how bad the error is, so it's better to just fail: raise diff --git a/lib/async/http/server.rb b/lib/async/http/server.rb index 5ec7916..82cd3fc 100755 --- a/lib/async/http/server.rb +++ b/lib/async/http/server.rb @@ -56,6 +56,8 @@ def accept(peer, address, task: Task.current) # If this returns nil, we assume that the connection has been hijacked. self.call(request) end + rescue Protocol::HTTP::BadRequest + # Ignore bad requests, just close the connection. ensure connection&.close end diff --git a/releases.md b/releases.md index 21c20d4..62b6ba6 100644 --- a/releases.md +++ b/releases.md @@ -3,6 +3,8 @@ ## Unreleased - Fix `defer_stop` usage in `HTTP1::Server`, improving server graceful shutdown behavior. + - Use more generic `Protocol::HTTP::BadRequest` exception in `HTTP1::Server` to handle bad requests, improving handling of more generic bad request errors. + - Ignore `Protocol::HTTP::BadRequest` exceptions for the purpose of logging, to reduce noise from "expected" bad requests. ## v0.94.0