mirror of https://github.com/fafhrd91/actix-web
Compare commits
8 Commits
2dc5254e4d
...
22508fcdac
Author | SHA1 | Date |
---|---|---|
|
22508fcdac | |
|
9fb6c13a1a | |
|
05cfef7f4b | |
|
8f3eb32a32 | |
|
ddd16ec9db | |
|
845534fc81 | |
|
605bcd18c6 | |
|
612e983576 |
|
@ -3,6 +3,6 @@ disallowed-names = [
|
|||
"e", # no single letter error bindings
|
||||
]
|
||||
disallowed-methods = [
|
||||
{ path = "std::cell::RefCell::default()", reason = "prefer explicit inner type default" },
|
||||
{ path = "std::rc::Rc::default()", reason = "prefer explicit inner type default" },
|
||||
{ path = "std::cell::RefCell::default()", reason = "prefer explicit inner type default (remove allow-invalid when rust-lang/rust-clippy/#8581 is fixed)", allow-invalid = true },
|
||||
{ path = "std::rc::Rc::default()", reason = "prefer explicit inner type default (remove allow-invalid when rust-lang/rust-clippy/#8581 is fixed)", allow-invalid = true },
|
||||
]
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,8 +2,11 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
- Update `TestRequest::set_payload` to generate "Content-Length" header
|
||||
- Malformed websocket frames are now gracefully rejected.
|
||||
## 3.11.1
|
||||
|
||||
- Prevent more hangs after client disconnects.
|
||||
- More malformed WebSocket frames are now gracefully rejected.
|
||||
- Using `TestRequest::set_payload()` now sets a Content-Length header.
|
||||
|
||||
## 3.11.0
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "actix-http"
|
||||
version = "3.11.0"
|
||||
version = "3.11.1"
|
||||
authors = ["Nikolay Kim <fafhrd91@gmail.com>", "Rob Ede <robjtede@icloud.com>"]
|
||||
description = "HTTP types and services for the Actix ecosystem"
|
||||
keywords = ["actix", "http", "framework", "async", "futures"]
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
<!-- prettier-ignore-start -->
|
||||
|
||||
[](https://crates.io/crates/actix-http)
|
||||
[](https://docs.rs/actix-http/3.11.0)
|
||||
[](https://docs.rs/actix-http/3.11.1)
|
||||

|
||||

|
||||
<br />
|
||||
[](https://deps.rs/crate/actix-http/3.11.0)
|
||||
[](https://deps.rs/crate/actix-http/3.11.1)
|
||||
[](https://crates.io/crates/actix-http)
|
||||
[](https://discord.gg/NWpN5mmg3x)
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ async fn h1_expect() {
|
|||
|
||||
// test expect would fail to continue
|
||||
let request = srv
|
||||
.request(http::Method::GET, srv.url("/"))
|
||||
.request(http::Method::POST, srv.url("/"))
|
||||
.insert_header(("Expect", "100-continue"));
|
||||
|
||||
let response = request.send_body("expect body").await.unwrap();
|
||||
|
@ -147,7 +147,7 @@ async fn h1_expect() {
|
|||
|
||||
// test expect would continue
|
||||
let request = srv
|
||||
.request(http::Method::GET, srv.url("/"))
|
||||
.request(http::Method::POST, srv.url("/"))
|
||||
.insert_header(("Expect", "100-continue"))
|
||||
.insert_header(("AUTH", "996"));
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ async fn h2_body() -> io::Result<()> {
|
|||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send_body(data.clone()).await.unwrap();
|
||||
let response = srv.spost("/").send_body(data.clone()).await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
||||
let body = srv.load_body(response).await.unwrap();
|
||||
|
|
|
@ -184,7 +184,7 @@ async fn h2_body1() -> io::Result<()> {
|
|||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send_body(data.clone()).await.unwrap();
|
||||
let response = srv.spost("/").send_body(data.clone()).await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
||||
let body = srv.load_body(response).await.unwrap();
|
||||
|
|
|
@ -13,6 +13,7 @@ macro_rules! register {
|
|||
register!(finish => "(.*)", "(.*)", "(.*)", "(.*)")
|
||||
}};
|
||||
(finish => $p1:literal, $p2:literal, $p3:literal, $p4:literal) => {{
|
||||
#[expect(clippy::useless_concat)]
|
||||
let arr = [
|
||||
concat!("/authorizations"),
|
||||
concat!("/authorizations/", $p1),
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
- The return type for `ServiceRequest::app_data::<T>()` was changed from returning a `Data<T>` to simply a `T`. To access a `Data<T>` use `ServiceRequest::app_data::<Data<T>>()`.
|
||||
|
||||
- Cookie handling has been offloaded to the `cookie` crate:
|
||||
|
||||
- `USERINFO_ENCODE_SET` is no longer exposed. Percent-encoding is still supported; check docs.
|
||||
- Some types now require lifetime parameters.
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
- `GET/HEAD/OPTIONS/TRACE` methods no longer send a request body on request.
|
||||
|
||||
## 3.7.0
|
||||
|
||||
- Update `brotli` dependency to `8`.
|
||||
|
|
|
@ -4,8 +4,12 @@ use std::{
|
|||
task::{Context, Poll},
|
||||
};
|
||||
|
||||
use actix_http::body::{BodySize, BoxBody, MessageBody};
|
||||
use actix_http::{
|
||||
body::{BodySize, BoxBody, MessageBody},
|
||||
RequestHead,
|
||||
};
|
||||
use bytes::Bytes;
|
||||
use http::Method;
|
||||
use pin_project_lite::pin_project;
|
||||
|
||||
pin_project! {
|
||||
|
@ -75,11 +79,15 @@ where
|
|||
/// Converts a [`MessageBody`] type into the best possible representation.
|
||||
///
|
||||
/// Checks size for `None` and tries to convert to `Bytes`. Otherwise, uses the `Body` variant.
|
||||
pub fn from_message_body(body: B) -> Self
|
||||
pub fn from_message_body(head: &RequestHead, body: B) -> Self
|
||||
where
|
||||
B: MessageBody,
|
||||
{
|
||||
if matches!(body.size(), BodySize::None) {
|
||||
if matches!(
|
||||
head.method,
|
||||
Method::GET | Method::HEAD | Method::OPTIONS | Method::TRACE
|
||||
) || matches!(body.size(), BodySize::None)
|
||||
{
|
||||
return Self::None;
|
||||
}
|
||||
|
||||
|
|
|
@ -189,16 +189,14 @@ impl RequestSender {
|
|||
body: impl MessageBody + 'static,
|
||||
) -> SendClientRequest {
|
||||
let req = match self {
|
||||
RequestSender::Owned(head) => ConnectRequest::Client(
|
||||
RequestHeadType::Owned(head),
|
||||
AnyBody::from_message_body(body).into_boxed(),
|
||||
addr,
|
||||
),
|
||||
RequestSender::Rc(head, extra_headers) => ConnectRequest::Client(
|
||||
RequestHeadType::Rc(head, extra_headers),
|
||||
AnyBody::from_message_body(body).into_boxed(),
|
||||
addr,
|
||||
),
|
||||
RequestSender::Owned(head) => {
|
||||
let body = AnyBody::from_message_body(&head, body).into_boxed();
|
||||
ConnectRequest::Client(RequestHeadType::Owned(head), body, addr)
|
||||
}
|
||||
RequestSender::Rc(head, extra_headers) => {
|
||||
let body = AnyBody::from_message_body(&head, body).into_boxed();
|
||||
ConnectRequest::Client(RequestHeadType::Rc(head, extra_headers), body, addr)
|
||||
}
|
||||
};
|
||||
|
||||
let fut = config.connector.call(req);
|
||||
|
|
|
@ -62,7 +62,7 @@ async fn json() {
|
|||
});
|
||||
|
||||
let request = srv
|
||||
.get("/")
|
||||
.post("/")
|
||||
.insert_header(("x-test", "111"))
|
||||
.send_json(&"TEST".to_string());
|
||||
let response = request.await.unwrap();
|
||||
|
|
8
justfile
8
justfile
|
@ -13,6 +13,8 @@ fmt:
|
|||
[private]
|
||||
downgrade-for-msrv:
|
||||
cargo {{ toolchain }} update -p=divan --precise=0.1.15 # next ver: 1.80.0
|
||||
cargo {{ toolchain }} update -p=rayon --precise=1.10.0 # next ver: 1.80.0
|
||||
cargo {{ toolchain }} update -p=rayon-core --precise=1.12.1 # next ver: 1.80.0
|
||||
cargo {{ toolchain }} update -p=half --precise=2.4.1 # next ver: 1.81.0
|
||||
cargo {{ toolchain }} update -p=idna_adapter --precise=1.2.0 # next ver: 1.82.0
|
||||
cargo {{ toolchain }} update -p=litemap --precise=0.7.4 # next ver: 1.81.0
|
||||
|
@ -50,8 +52,7 @@ clippy:
|
|||
cargo {{ toolchain }} clippy --workspace --all-targets {{ all_crate_features }}
|
||||
|
||||
# Run Clippy over workspace using MSRV.
|
||||
clippy-msrv:
|
||||
@just toolchain={{ msrv_rustup }} downgrade-for-msrv
|
||||
clippy-msrv: downgrade-for-msrv
|
||||
@just toolchain={{ msrv_rustup }} clippy
|
||||
|
||||
# Test workspace code.
|
||||
|
@ -62,8 +63,7 @@ test:
|
|||
cargo {{ toolchain }} nextest run --no-tests=warn --workspace --exclude=actix-web-codegen --exclude=actix-multipart-derive {{ all_crate_features }} --filter-expr="not test(test_reading_deflate_encoding_large_random_rustls)"
|
||||
|
||||
# Test workspace using MSRV.
|
||||
test-msrv:
|
||||
@just toolchain={{ msrv_rustup }} downgrade-for-msrv
|
||||
test-msrv: downgrade-for-msrv
|
||||
@just toolchain={{ msrv_rustup }} test
|
||||
|
||||
# Test workspace docs.
|
||||
|
|
Loading…
Reference in New Issue