An asynchronous client and server implementation of HTTP/1.0, HTTP/1.1 and HTTP/2 including TLS. Support for streaming requests and responses. Built on top of async, io-endpoint and io-stream. falcon provides a rack-compatible server.
Please see the project documentation for more details.
-
Getting Started - This guide explains how to get started with
Async::HTTP. -
Testing - This guide explains how to use
Async::HTTPclients and servers in your tests.
Please see the project releases for all releases.
- Fix response body leak in HTTP/2 server when stream is reset before
send_responsecompletes (e.g. client-side gRPC cancellation). The response body'sclosewas never called, leaking any resources tied to body lifecycle (such asrack.response_finishedcallbacks and utilization metrics).
- Fix
defer_stopusage inHTTP1::Server, improving server graceful shutdown behavior.
- Propagate all errors from background reader to active streams so that they are closed correctly (e.g. errors are not missed).
- Better handling of trailers. If invalid trailers are received, the connection (HTTP/1) or stream (HTTP/2) is reset.
- Breaking: Remove
Async::HTTP::Reference. UseProtocol::URL::Referencedirectly instead.
- Move all default trace providers into
traces/provider/async/http.
- Don't emit
resource:keyword argument in traces - it's unsupported by OpenTelemetry.
- Add support for HTTP/2
NO_RFC7540_PRIORITIES. See https://www.rfc-editor.org/rfc/rfc9218.html for more details.
- benchmark-http — A benchmarking tool to report on web server concurrency.
- falcon — A rack compatible server built on top of
async-http. - async-websocket — Asynchronous client and server websockets.
- async-rest — A RESTful resource layer built on top of
async-http. - async-http-faraday — A faraday adapter to use
async-http.
We welcome contributions to this project.
- Fork it.
- Create your feature branch (
git checkout -b my-new-feature). - Commit your changes (
git commit -am 'Add some feature'). - Push to the branch (
git push origin my-new-feature). - Create new Pull Request.
To run the test suite:
bundle exec susTo make a new release:
bundle exec bake gem:release:patch # or minor or majorIn order to protect users of this project, we require all contributors to comply with the Developer Certificate of Origin. This ensures that all contributions are properly licensed and attributed.
This project is best served by a collaborative and respectful environment. Treat each other professionally, respect differing viewpoints, and engage constructively. Harassment, discrimination, or harmful behavior is not tolerated. Communicate clearly, listen actively, and support one another. If any issues arise, please inform the project maintainers.