80 lines
3.2 KiB
Markdown
80 lines
3.2 KiB
Markdown
|
|
# Tower HTTP
|
||
|
|
|
||
|
|
Tower middleware and utilities for HTTP clients and servers.
|
||
|
|
|
||
|
|
[](https://github.com/tower-rs/tower-http/actions)
|
||
|
|
[](https://crates.io/crates/tower-http)
|
||
|
|
[](https://docs.rs/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/main/examples
|
||
|
|
[http]: https://crates.io/crates/http
|
||
|
|
[tonic-key-value-store]: https://github.com/tower-rs/tower-http/tree/main/examples/tonic-key-value-store
|
||
|
|
[warp-key-value-store]: https://github.com/tower-rs/tower-http/tree/main/examples/warp-key-value-store
|
||
|
|
[axum-key-value-store]: https://github.com/tower-rs/tower-http/tree/main/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/main/examples
|
||
|
|
[guides]: https://github.com/tower-rs/tower/tree/master/guides
|