Commit Graph

581 Commits

Author SHA1 Message Date
asonix 4df9953c86
actix-http: h1: stop pipelining when not reading full requests (#3721)
* actix-http: h1: stop pipelining when not reading full requests

The existing pipelining behavior of the h1 dispatcher can cause client timeouts
if the entire request body isn't read. It puts the dispatcher into a state where
it refuses to read more (payload dropped) but there are still bytes in the buffer
from the request body.

This solution adds the SHUTDOWN flag in addition to the FINISHED flag
when completing a response when both the following are true:

1. There are no messages in `this.messages`
2. There is still a payload in `this.payload`

This combination implies two things. First, that we have not parsed a
pipelined request after the request we have just responded to. Second,
that the current request payload has not been fed an EOF. Because there
are no pipelined requests, we know that the current request payload
belongs to the request we have just responded to, and because the
request payload has not been fed an EOF, we know we never finished
reading it.

When this occurs, adding the SHUTDOWN flag to the dispatcher triggers a
`flush` and a `poll_shutdown` on the IO resource on the next poll.

* Remove printlns from dispatcher

* Add test that fails without changes & passes with changes

* Add changelog entry for h1 shutdown

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
Co-authored-by: Yuki Okushi <huyuumi.dev@gmail.com>
2025-10-05 01:07:35 +00:00
Thales Fragoso fde7934243
Add option to allow/disallow half closures in HTTP/1 (#3777)
* Add ServiceConfigBuilder to facilitate future extensions

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

* Add option to allow/disallow h1 half closures

The default is set to allow, thus reverting a change made in 3.11.1

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

* Add tests for h1 half closures

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

* Comply with clippy

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

* Adjust imports to satisfy fmt

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

---------

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>
2025-10-04 23:03:26 +00:00
Yuki Okushi 429ff82a4b
fix: rename doc_auto_cfg feature (#3787) 2025-09-29 10:42:56 +00:00
Thales d3c46537b3
fix(http): Wake Payload when feeding error or EOF (#3749)
* fix(http): Add failing tests to demonstrate the payload problem

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

* fix(http): Wake Payload when feeding error or eof

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>

---------

Signed-off-by: Thales Fragoso <thales.fragoso@axiros.com>
2025-08-29 02:47:03 +00:00
Andrew Scott c6352005f7
fix: include content-length with bytes payload (#3695)
* fix: include content-length with bytes payload

* chore: json unit-test patch

* Update doc comment

---------

Co-authored-by: Yuki Okushi <huyuumi.dev@gmail.com>
2025-08-24 09:42:11 +00:00
yanyuxing 30f7df5853
fix(actix-http): wake before return pending when read half disconnect and need to shutdown (#3665) 2025-08-23 00:56:39 +00:00
Guido Vranken 5f6c84494a
Fix integer overflow in actix_http::ws::Parser::parse (#3728)
* Fix integer overflow in actix_http::ws::Parser::parse

* Add changelog

---------

Co-authored-by: Yuki Okushi <huyuumi.dev@gmail.com>
2025-08-22 06:24:22 +00:00
Rob Ede 7eea3d3657
chore: address clippy lints 2025-05-09 20:21:02 +01:00
Bernard Assan df0885cf21
Add from_bytes/u8_bytes to dev::Payload (#3595)
* feat: Add from_bytes/u8_bytes to dev::Payload

This allows convinent construction of Payload from bytes which is
useful in middlewares

closes actix/actix-web#3589

Add doc comment and changelog entry

* implement from<bytes/vec> for payload

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
2025-03-09 16:40:00 +00:00
dependabot[bot] 9656383646
build(deps): update derive_more requirement from 1 to 2 (#3571)
* build(deps): update derive_more requirement from 1 to 2

Updates the requirements on [derive_more](https://github.com/JelteF/derive_more) to permit the latest version.
- [Release notes](https://github.com/JelteF/derive_more/releases)
- [Changelog](https://github.com/JelteF/derive_more/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JelteF/derive_more/compare/v1.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: derive_more
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* refactor: simplify derive_more calls

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rob Ede <robjtede@icloud.com>
2025-02-10 01:27:56 +00:00
Akos Vandra-Meyer 04533a15fa
Add `Extensions::get_or_insert[_with]()` methods (#3561)
* add get_or_insert and get_or_insert_with for Extensions

* add docs

* fix doctest

* docs: update changelog

* chore: simplify get_or_insert

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
2025-02-09 22:04:21 +00:00
Rob Ede ac2a3bb124
refactor: replace ahash with foldhash (#3483) 2024-12-29 16:20:00 +00:00
Rob Ede 34327bd221
chore: address clippy warnings 2024-12-29 15:03:43 +00:00
Rob Ede ec05381f6f
feat: add CLEAR_SITE_DATA header 2024-10-15 07:01:01 +01:00
John Vandenberg d6bdfac1b9
build(deps): update derive_more to v1.0 (#3453)
* build(deps): update derive_more to v1.0

* refactor: use from derive module

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-08-18 14:17:03 +00:00
Rob Ede 538c1bea34
chore: disallow e bindings 2024-08-10 05:15:49 +01:00
Rob Ede 5c6e0e17d3
feat(http): impl FromIter for HeaderMap 2024-07-07 21:16:25 +01:00
Rob Ede e0e4d1e661
chore: move deny lints to manifests 2024-07-07 03:54:00 +01:00
Rob Ede 763c58445a
test: fix tests based on mime-guess inference
relates to https://github.com/abonander/mime_guess/pull/86
2024-06-30 20:28:11 +01:00
Rob Ede cbb55ba27d
ci: use just for feature combos check 2024-06-20 00:04:35 +01:00
Yury Yarashevich 643d64581a
Fix Rustls 0.22 & 0.23 are limited to 256 handshakes per second. (#3408) 2024-06-19 22:34:49 +00:00
Samuel Marks 22593a1532
Re-export `http::status::InvalidStatusCode` (#3393)
* [actix-http/src/lib.rs] Expose/re-export `http::status::InvalidStatusCode`

* [actix-http/src/error.rs] Re-export `http::status::InvalidStatusCode` ; [actix-http/src/lib.rs] Revert
2024-06-09 05:07:56 +00:00
asonix 4493aa35d0
actix-http::ws: Remove redundant + 4 byte reservation when masked (#3371)
* actix-http::ws: Remove redundant + 4 byte reservation when masked

* actix-http: Update CHANGES wrt byte fix

* docs: remove changelog entry

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-06-07 14:41:32 +00:00
asonix 2d035c066e
actix-http: Add rustls 0.23 (#3361)
Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-05-18 19:22:53 +01:00
Rob Ede c1a6388614
refactor: address clippy warnings 2024-05-06 06:03:44 +01:00
dependabot[bot] 8c31d137aa
build(deps): bump taiki-e/install-action from 2.26.18 to 2.27.2 (#3294)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-02-19 12:31:10 +00:00
Rob Ede 022b052bd9
chore: clippy 2024-02-12 23:02:45 +00:00
Rob Ede 1e2ef6f92f
perf: remove unnecessary allocation when writing http dates (#3261) 2024-02-07 03:47:30 +00:00
Rob Ede d9b31b80ac
fix: standardize body stream error reporting 2024-02-04 03:11:48 +00:00
Rob Ede 2125aca2c5
Rustls v0.22 support (#3275) 2024-02-03 23:55:01 +00:00
SleeplessOne1917 ae7736f134
Implement `From<&HeaderMap>` for `http::HeaderMap` (#3230)
* Add From impl for header map references

* Add From impl for header map references

* Remove Into<HeaderMap> via http::HeaderMap

* fix changelog

---------

Co-authored-by: SleeplessOne1917 <insomnia-void@protonmail.com>
Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-02-01 12:52:35 +00:00
Rob Ede a7375b6876
ci: faster cargo-public-api install (#3255) 2024-01-22 02:19:19 +00:00
Rob Ede ac04d80d8e
docs: better docs for peer_addr methods 2024-01-08 15:17:40 +00:00
Rob Ede d14e98b62b
prevent hang when compressing Sized(0) bodies
fixes #3229
2023-12-25 02:27:51 +00:00
Rob Ede 5e5e5d8315
chore: remove allow(uninlined_format_args) 2023-12-16 10:33:00 +00:00
Rob Ede c7a0af31d3
docs: doc and metadata tweaks 2023-12-16 10:33:00 +00:00
SleeplessOne1917 eefe8b0733
Implement From<HeaderMap> for http::HeaderMap (#3222)
* Implement From<HeaderMap> for http::HeaderMap

* Update changelog

* Apply clippy fix

* doc tweak

---------

Co-authored-by: SleeplessOne1917 <insomnia-void@protonmail.com>
Co-authored-by: Rob Ede <robjtede@icloud.com>
2023-12-16 10:08:45 +00:00
Paul 2fe5189954
Do not encode zero-sized response bodies (#3199)
* Do not encode zero-sized response bodies

* Test empty response remains empty after compression
2023-11-26 20:57:19 +00:00
Rob Ede 215a52f565
chore: avoid single char error bindings 2023-09-03 19:09:42 +01:00
Rob Ede 905c30af86
Actix Web Rustls v0.21 support (#3116) 2023-08-29 01:11:11 +01:00
Rob Ede 55c15f5bbf
minimum viable rustls v0.21 support (#3112) 2023-08-27 00:07:11 +01:00
Rob Ede 146011018e
add payload to_bytes helpers (#3083) 2023-07-22 02:02:29 +01:00
Rob Ede 3eb5a059ad
chore: address clippy warnings 2023-07-20 11:42:20 +01:00
Rob Ede 79a38e0628
apply standard formatting 2023-07-17 02:38:12 +01:00
mitsubosh ce3af777a0
Fix typo (#3062) 2023-07-05 16:29:10 +00:00
Rob Ede 241da6e081
update MSRV to 1.65 (#3059) 2023-07-02 01:09:15 +01:00
Rob Ede 1072d0dacf
address lints 2023-06-09 15:15:09 +01:00
moh-eulith 17218dc6c8
minor optimization: reserve buffer once length is known (ws) (#2950) 2023-05-07 15:13:10 +00:00
Rob Ede 6fdda45ca3
update bitflags to v2 2023-05-06 11:38:51 +01:00
Rob Ede 5e29726c4f
standardize error messages in actix-http 2023-03-13 17:17:02 +00:00