mirror of https://github.com/fafhrd91/actix-web
The `downcast_ref` and `downcast_mut` methods rely on the `TypeId` returned from `__private_get_type_id__` for soundness. To prevent users from overriding `__private_get_type_id__`, it returns a tuple containing a type with a private constructor (`PrivateHelper`), ensuring that any user-provided implementation cannot actually return. However, there's a loophole - safe code could obtain an instance of `PrivateHelper` by calling `__private_get_type_id__` on an *existing* implementation, and then returning that `PrivateHelper` instance from their own implementation. While this is incredibly contrived, and could never happen by accident, it's still technically a soundness hole. To fix this, `__private__get_type_id__` is changed to also take in a `PrivateHelper` as a parameter. Now, safe code cannot use this method to obtain a `PrivateHelper`, since a `PrivateHelper` would already need to be available in order to call the method in the first place. |
||
---|---|---|
.cargo | ||
.github | ||
actix-files | ||
actix-http | ||
actix-http-test | ||
actix-multipart | ||
actix-test | ||
actix-web-actors | ||
actix-web-codegen | ||
awc | ||
benches | ||
docs/graphs | ||
examples | ||
src | ||
tests | ||
.gitignore | ||
CHANGES.md | ||
CODE_OF_CONDUCT.md | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
MIGRATION.md | ||
README.md | ||
clippy.toml | ||
codecov.yml | ||
rustfmt.toml |
README.md
Features
- Supports HTTP/1.x and HTTP/2
- Streaming and pipelining
- Keep-alive and slow requests handling
- Client/server WebSockets support
- Transparent content compression/decompression (br, gzip, deflate)
- Powerful request routing
- Multipart streams
- Static assets
- SSL support using OpenSSL or Rustls
- Middlewares (Logger, Session, CORS, etc)
- Includes an async HTTP client
- Runs on stable Rust 1.46+
Documentation
Example
Dependencies:
[dependencies]
actix-web = "3"
Code:
use actix_web::{get, web, App, HttpServer, Responder};
#[get("/{id}/{name}/index.html")]
async fn index(web::Path((id, name)): web::Path<(u32, String)>) -> impl Responder {
format!("Hello {}! id:{}", name, id)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(index))
.bind("127.0.0.1:8080")?
.run()
.await
}
More examples
- Basic Setup
- Application State
- JSON Handling
- Multipart Streams
- Diesel Integration
- r2d2 Integration
- Simple WebSocket
- Tera Templates
- Askama Templates
- HTTPS using Rustls
- HTTPS using OpenSSL
- WebSocket Chat
You may consider checking out this directory for more examples.
Benchmarks
One of the fastest web frameworks available according to the TechEmpower Framework Benchmark.
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or [http://www.apache.org/licenses/LICENSE-2.0])
- MIT license (LICENSE-MIT or [http://opensource.org/licenses/MIT])
at your option.
Code of Conduct
Contribution to the actix-web repo is organized under the terms of the Contributor Covenant. The Actix team promises to intervene to uphold that code of conduct.