# Tower HTTP
Tower middleware and utilities for HTTP clients and servers.
[![Build status](https://github.com/tower-rs/tower-http/workflows/CI/badge.svg)](https://github.com/tower-rs/tower-http/actions)
[![Crates.io](https://img.shields.io/crates/v/tower-http)](https://crates.io/crates/tower-http)
[![Documentation](https://docs.rs/tower-http/badge.svg)](https://docs.rs/tower-http)
[![Crates.io](https://img.shields.io/crates/l/tower-http)](tower-http/LICENSE)
More information about this crate can be found in the [crate documentation][docs].
## Middleware
Tower HTTP contains lots of middleware that are generally useful when building
HTTP servers and clients. Some of the highlights are:
- `Trace` adds high level logging of requests and responses. Supports both
regular HTTP requests as well as gRPC.
- `Compression` and `Decompression` to compress/decompress response bodies.
- `FollowRedirect` to automatically follow redirection responses.
See the [docs] for the complete list of middleware.
Middleware uses the [http] crate as the HTTP interface so they're compatible
with any library or framework that also uses [http]. For example [hyper].
The middleware were originally extracted from one of [@EmbarkStudios] internal
projects.
## Examples
The [examples] folder contains various examples of how to use Tower HTTP:
- [warp-key-value-store]: A key/value store with an HTTP API built with warp.
- [tonic-key-value-store]: A key/value store with a gRPC API and client built with tonic.
- [axum-key-value-store]: A key/value store with an HTTP API built with axum.
## Minimum supported Rust version
tower-http's MSRV is 1.66.
## Getting Help
If you're new to tower its [guides] might help. In the tower-http repo we also
have a [number of examples][examples] showing how to put everything together.
You're also welcome to ask in the [`#tower` Discord channel][chat] or open an
[issue] with your question.
## Contributing
:balloon: Thanks for your help improving the project! We are so happy to have
you! We have a [contributing guide][guide] to help you get involved in the Tower
HTTP project.
[guide]: CONTRIBUTING.md
## License
This project is licensed under the [MIT license](tower-http/LICENSE).
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in Tower HTTP by you, shall be licensed as MIT, without any
additional terms or conditions.
[@EmbarkStudios]: https://github.com/EmbarkStudios
[examples]: https://github.com/tower-rs/tower-http/tree/master/examples
[http]: https://crates.io/crates/http
[tonic-key-value-store]: https://github.com/tower-rs/tower-http/tree/master/examples/tonic-key-value-store
[warp-key-value-store]: https://github.com/tower-rs/tower-http/tree/master/examples/warp-key-value-store
[axum-key-value-store]: https://github.com/tower-rs/tower-http/tree/master/examples/axum-key-value-store
[chat]: https://discord.gg/tokio
[docs]: https://docs.rs/tower-http
[hyper]: https://github.com/hyperium/hyper
[issue]: https://github.com/tower-rs/tower-http/issues/new
[milestone]: https://github.com/tower-rs/tower-http/milestones
[examples]: https://github.com/tower-rs/tower-http/tree/master/examples
[guides]: https://github.com/tower-rs/tower/tree/master/guides