actix-web/CHANGES.md
Route::to() or Route::service() after Route::wrap() to prevent silently dropping route middleware. #3944HttpRequest::{match_pattern,match_name} reporting path-only matches when route guards disambiguate overlapping resources. #3346Readlines handling of lines split across payload chunks so combined line limits are enforced and complete lines are yielded.HttpServer::{h2_initial_window_size, h2_initial_connection_window_size} methods for tuning. #3638HttpRequest::url_for_map and HttpRequest::url_for_iter methods for named URL parameters. #3895Cookie request header.experimental-introspection feature to report configured routes #3594TCP_NODELAY. #3918NormalizePath rewrites a scoped dynamic path before extraction (e.g., scope("{tail:.*}") + Path<String>). #3562actix-http dependency requirement.actix_web::response::builder::HttpResponseBuilder::streaming() now sets Content-Type to application/octet-stream if Content-Type does not exist.actix_web::response::builder::HttpResponseBuilder::streaming() now calls actix_web::response::builder::HttpResponseBuilder::no_chunking() and returns SizedStream if Content-Length is set by user.ws crate feature (on-by-default) which forwards to actix-http and guards some of its ResponseError impls.EitherExtractError in error module.Logger::log_level() method.Logger middleware.HttpServer::shutdown_signal() method.HttpServer as #[must_use].Compress middleware.Host header in Host guard when connection protocol is HTTP/2.mime dependency.brotli dependency to 8.4.10.1.4.10.0.Responder for Result<(), E: Into<Error>>. Returning Ok(()) responds with HTTP 204 No Content.HttpServer::bind() (or TLS variants) when binding to a socket that's already in use.brotli dependency to 7.middleware::from_fn() helper.web::ThinData extractor.web::Html responder.HttpRequest::full_url() method to get the complete URL of the request.ConnectionInfo::realip_remote_addr() when handling IPv6 addresses. from the Forwarded header.UrlencodedError::ContentType variant (relevant to the Form extractor) now uses the 415 (Media Type Unsupported) status code in it's ResponseError implementation.HttpServer::max_connection_rate() setting when using rustls v0.22 or v0.23.#[scope] macro.middleware::Identity type.CustomizeResponder::add_cookie() method.guard::GuardContext::app_data() method.compat-routing-macros-force-pub crate feature which (on-by-default) which, when disabled, causes handlers to inherit their attached function's visibility.compat crate feature group (on-by-default) which, when disabled, helps with transitioning to some planned v5.0 breaking changes, starting only with compat-routing-macros-force-pub.From<Box<dyn ResponseError>> for Error.unicode crate feature (on-by-default) to switch between regex and regex-lite as a trade-off between full unicode support and binary size.rustls-0_23 crate feature.HttpServer::{bind_rustls_0_23, listen_rustls_0_23}() builder methods.HttpServer::tls_handshake_timeout() builder method for rustls-0_22 and rustls-0_23.brotli dependency to 6.rustls in some circumstances.rustls-0_22 crate feature.HttpServer::{bind_rustls_0_22, listen_rustls_0_22}() builder methods.zstd dependency to 0.13.Json extractor when JsonConfig::validate_content_type() is set to false.HttpServer::{bind, listen}_auto_h2c() methods behind new http2 crate feature.HttpServer::{bind, listen}_rustls_021() methods for Rustls v0.21 support behind new rustls-0_21 crate feature.Resource::{get, post, etc...} methods for more concisely adding routes that don't need additional guards.web::Payload::to_bytes[_limited]() helper methods.HttpResponse for several status codes.http::header::ContentLength typed header.Default for web::Data.serde::Deserialize for web::Data.rustls-0_20 crate feature, which the existing rustls feature now aliases.Compress middleware no longer compresses image or video content.HttpRequest's Debug output.time dependency.#[route] macro. #2969ContentDisposition::attachment() constructor. #2867ErrorHandlers::default_handler() (as well as default_handler_{server, client}()) to make registering handlers for groups of response statuses easier. #2784Logger::custom_response_replace(). #2631web::redirect() / web::Redirect. #1961guard::Acceptable for matching against Accept header MIME types. #2265test helpers: try_call_service(), try_call_and_read_body_json(), try_read_body(), and try_read_body_json(). #2961Allow header to Resource's default responses when no routes are matched. #2949actix-http dependency to fix compatibility issue. #2871#[routes] macro to support multiple paths for one handler. #2718ServiceRequest::{parts, request}() getter methods. #2786HttpServer::{rustls, openssl}_with_config methods. #2752time dependency.ServiceRequest::extract() to make it easier to use extractors when writing middlewares. #2647Route::wrap() to allow individual routes to use middleware. #2725ServiceConfig::default_service(). #2338 #2743ResponseError for std::convert::Infalliblehashbrown dependency.HttpRequest drop. #2742actix-* to Tokio v1-based versions. #1813actix-web-codegen to 4.0.0.cookie to 0.16. #2555language-tags to 0.3.rand to 0.8.rustls to 0.20. #2414tokio to 1.CustomizeResponder for customizing response. #2510dev::ServerHandle re-export from actix-server. #2442dev::ServiceFactory re-export from actix-service. #2325guard::GuardContext for use with the Guard trait. #2552http::header::AcceptEncoding typed header. #2482http::header::Range typed header. #2485http::KeepAlive re-export from actix-http. #2625middleware::Compat that boxes middleware types like Logger and Compress to be used with constrained type bounds. #1865web::Header extractor for extracting typed HTTP headers in handlers. #2094dev::ServiceRequest::guard_ctx() for obtaining a guard context. #2552dev::ServiceRequest::parts_mut(). #2177dev::ServiceResponse::map_into_{left,right}_body() and HttpResponse::map_into_boxed_body(). #2468Either<web::Json<T>, web::Form<T>>::into_inner() which returns the inner type for whichever variant was created. Also works for Either<web::Form<T>, web::Json<T>>. #1894http::header::AcceptLanguage::{ranked, preference}(). #2480HttpResponse::add_removal_cookie(). #2586HttpResponse::map_into_{left,right}_body() and HttpResponse::map_into_boxed_body(). #2468HttpServer::worker_max_blocking_threads for setting block thread pool. #2200middleware::Logger::log_target() to allow customize. #2594Responder::customize() trait method that wraps responder in CustomizeResponder. #2510Route::service() for using hand-written services as handlers. #2262ServiceResponse::into_parts(). #2499TestServer::client_headers() method. #2097web::ServiceConfig::configure() to allow easy nesting of configuration functions. #1988#[actix_web::test] macro for setting up tests with a runtime. #2409App #1933services! macro for helping register multiple services to App. #1933Json extractor to work without a Content-Type header present. #2362HttpServer::on_connect callback is now accessible only from the new HttpRequest::conn_data() and ServiceRequest::conn_data() methods. #2491guard::fn_guard functions now receives a &GuardContext. #2552guard::Not is now generic over the type of guard it wraps. #2552test::{call_service, read_response, read_response_json, send_request}() now receive a &Service. #1905impl Guard and their concrete types are made private: guard::Header and all the method guards. #2552test::{default_service => status_service}(). Old name is deprecated. #2518test::{read_response_json => call_and_read_body_json}(). Old name is deprecated. #2518test::{read_response => call_and_read_body}(). Old name is deprecated. #2518App's B (body) type parameter been removed. As a result, Apps can be returned from functions now. #2493Compress middleware's response type is now EitherBody<Encoder<B>>. #2448error::BlockingError is now a unit struct. It's now only triggered when blocking thread pool has shutdown. #1957ErrorHandlerResponse's response variants now use ServiceResponse<EitherBody<B>>. #2515ErrorHandlers middleware's response types now use ServiceResponse<EitherBody<B>>. #2515http::header::Encoding now only represents Content-Encoding types. #2501middleware::Condition gained a broader middleware compatibility. #2635Resource no longer require service body type to be boxed. #2526Scope no longer require service body type to be boxed. #2523web::Paths inner field is now private. #1894web::Payload's inner field is now private. #2384#[non_exhaustive]. #2148App::data() is deprecated; App::app_data() should be preferred. #2271dev::JsonBody::new() returns a default limit of 32kB to be consistent with JsonConfig and the default behaviour of the web::Json<T> extractor. #2010dev::ServiceRequest::{into_parts, from_parts}() can no longer fail. #1893dev::ServiceRequest::from_request can no longer fail. #1893dev::ServiceResponse::error_response() now uses body type of BoxBody. #2201dev::ServiceResponse::map_body() closure receives and returns B instead of ResponseBody<B>. #2201http::header::ContentType::html() now produces text/html; charset=utf-8 instead of text/html. #2423HttpRequest::url_for's constructed URLs no longer contain query or fragment. #2430HttpResponseBuilder::json() can now receive data by value and reference. #1903HttpServer::{listen_rustls, bind_rustls}() now honor the ALPN protocols in the configuration parameter. [#2226]middleware::NormalizePath() now will not try to normalize URIs with no valid path #2246test::TestRequest::param() now accepts more than just static strings. #2172web::Data::into_inner() and Data::get_ref() no longer require T: Sized. #2403HttpServer::{client_timeout => client_request_timeout}(). #2611HttpServer::{client_shutdown => client_disconnect_timeout}(). #2611http::header::Accept::{mime_precedence => ranked}(). #2480http::header::Accept::{mime_preference => preference}(). #2480middleware::DefaultHeaders::{content_type => add_content_type}(). #1875dev::ConnectionInfo::{remote_addr => peer_addr}, deprecating the old name. #2554HttpResponse can now be used as a Responder with any body type. #2567TrailingSlash behavior is now Trim, in line with existing documentation. See migration guide for implications. #1875Result extractor wrapper can now convert error types. #2581406 Not Acceptable when no content encoding is acceptable to the client. #2344Into<Error> to Into<Response<BoxBody>>. #2253Into<Error> to Into<Box<dyn std::error::Error>>. #2253dev::ConnectionInfo extractor. #2282FromRequest implementation for Option and Result have changed. #2581error to debug for the log line that is emitted when a 500 Internal Server Error is built using HttpResponse::from_error. #2201Compress middleware. #2501App::data() with the same type now keeps the latest call's data. #1906dev::ConnectionInfo::peer_addr will no longer return the port number. #2554dev::ConnectionInfo::realip_remote_addr will no longer return the port number if sourcing the IP from the peer's socket address. #2554* items in AcceptLanguage. #2480Unpin bound on S (stream) parameter of HttpResponseBuilder::streaming. #2448http::header::AcceptEncoding typed header. #2344middleware::Logger format is escaped correctly. #2067test::read_body_json's panic message. #1812cookie upgrade addresses RUSTSEC-2020-0071.compress feature. #2065BodyEncoding; signalling content encoding is now only done via the Content-Encoding header. #2565dev::{BodySize, MessageBody, SizedStream} re-exports; they are exposed through the body module. #2468EitherExtractError direct export. #2510rt::{Arbiter, ArbiterHandle} re-exports. #2619test::TestServer; moved to new actix-test crate. #2112test::TestServerConfig; moved to new actix-test crate. #2112web::HttpRequest re-export. #2663web::HttpResponse re-export. #2663AppService::set_service_data; for custom HTTP service factories adding application data, use the layered data model by calling ServiceRequest::add_data_container when handling requests instead. #1906dev::ConnectionInfo::get. #2487dev::ServiceResponse::checked_expr. #2401HttpRequestBuilder::del_cookie. #2591HttpResponse::take_body and old HttpResponse::into_body method that casted body type. #2201HttpResponseBuilder::json2(). #1903middleware::Compress::new; restricting compression algorithm is done through feature flags. #2501test::TestRequest::with_header(); use test::TestRequest::default().insert_header(). #1869client module was removed; use the awc crate directly. 871ca5e4middleware::{normalize, err_handlers} modules; all necessary middleware types are now exposed in the middleware module.middleware::Condition gained a broader compatibility; Compat is needed in fewer cases. #2635macros feature flag to enable routing and runtime macros. #2619rt::{Arbiter, ArbiterHandle} re-exports. #2619HttpServer::{client_timeout => client_request_timeout}. #2611HttpServer::{client_shutdown => client_disconnect_timeout}. #2611impl Future for HttpResponse. #2601HttpRequest::req_data[_mut](); request-local data is still available through .extensions(). #2585HttpRequestBuilder::del_cookie. #2591GuardContext::header #2569ServiceConfig::configure to allow easy nesting of configuration functions. #1988HttpResponse can now be used as a Responder with any body type. #2567Result extractor wrapper can now convert error types. #2581FromRequest impl for Option and Result has changed. #2581<B as MessageBody>::Error: Debug in test utility functions in order to support returning opaque apps. #2584AcceptEncoding::preference now returns Option<Preference<Encoding>>. #2501BodyEncoding::{encoding => encode_with, get_encoding => preferred_encoding}. #2501http::header::Encoding now only represents Content-Encoding types. #2501Compress middleware. #2501Compress::new; restricting compression algorithm is done through feature flags. #2501BodyEncoding trait; signalling content encoding is now only done via the Content-Encoding header. #2565cookie dependency (re-exported) to 0.16. #2555cookie upgrade addresses RUSTSEC-2020-0071.guard::GuardContext for use with the Guard trait. #2552ServiceRequest::guard_ctx for obtaining a guard context. #2552Guard trait now receives a &GuardContext. #2552guard::fn_guard functions now receives a &GuardContext. #2552impl Guard and their concrete types are made private: guard::Header and all the method guards. #2552Not guard is now generic over the type of guard it wraps. #2552ConnectionInfo::{remote_addr => peer_addr}, deprecating the old name. #2554ConnectionInfo::peer_addr will not return the port number. #2554ConnectionInfo::realip_remote_addr will not return the port number if sourcing the IP from the peer's socket address. #2554Scope service body type to be boxed. #2523Resource service body type to be boxed. #2526Responder trait (customize) for customizing responders and CustomizeResponder struct. #2510Debug for DefaultHeaders. #2510DefaultHeader method terminology, deprecating previous methods. #2510ErrorHandlers middleware now use ServiceResponse<EitherBody<B>> to allow changing the body type. #2515ErrorHandlerResponse now use ServiceResponse<EitherBody<B>>. #2515test::{default_service => simple_service}. Old name is deprecated. #2518test::{read_response_json => call_and_read_body_json}. Old name is deprecated. #2518test::{read_response => call_and_read_body}. Old name is deprecated. #2518EitherExtractError export. #2510either crate. #2516test::load_stream and test::load_body; replace usage with body::to_bytes. #2518AcceptLanguage: ranked and preference. #2480AcceptEncoding typed header. #2482Range typed header. #2485HttpResponse::map_into_{left,right}_body and HttpResponse::map_into_boxed_body. #2468ServiceResponse::map_into_{left,right}_body and HttpResponse::map_into_boxed_body. #2468HttpServer::on_connect callback is now accessible only from the new HttpRequest::conn_data() and ServiceRequest::conn_data() methods. #2491HttpRequest::{req_data,req_data_mut}. #2487ServiceResponse::into_parts. #2499Accept::{mime_precedence => ranked}. #2480Accept::{mime_preference => preference}. #2480App::data_factory. #2484HttpRequest::url_for no longer constructs URLs with query or fragment components. #2430B (body) type parameter on App. #2493B (body) type parameter on Scope. #2492RequestHead. Instead it is a distinct part of a Request. #2487* items in AcceptLanguage. #2480dev::{BodySize, MessageBody, SizedStream}. They are exposed through the body module. #2468ConnectionInfo::get. #2487actix-tls to 3.0.0-rc.1. #2474AnyBody<Encoder<B>>. #2448Unpin bound on S (stream) parameter of HttpResponseBuilder::streaming. #2448dev::ResponseBody re-export; is function is replaced by the new dev::AnyBody enum. #2446dev::ServerHandle from actix-server. #2442ContentType::html now produces text/html; charset=utf-8 instead of text/html. #2423actix-server to 2.0.0-beta.9. #2442Json extractor to work without a Content-Type header present. #2362#[actix_web::test] macro for setting up tests with a runtime. #2409FromRequest::Config was removed. #2233web::Payload. #2384Data::into_inner and Data::get_ref no longer requires T: Sized. #2403ServiceResponse::checked_expr method. #2401ServiceFactory in dev module. #2325BaseHttpResponse to dev::Response. #2379TestRequest::param to accept more than just static strings. #2172web::HttpResponse. #2379ServiceRequest::parts_mut. #2177Uri and Method. #2263ConnectionInfo and PeerAddr. #2263Route::service for using hand-written services as handlers. #2262App::data and App::data_factory. #2271ConnectionInfo parts. #2282HttpServer::worker_max_blocking_threads for setting block thread pool. #2200JsonPayloadError::Overflow error variant. #2162ServiceResponse::error_response now uses body type of Body. #2201ServiceResponse::checked_expr now returns a Result. #2201language-tags to 0.3.ServiceResponse::take_body. #2201ServiceResponse::map_body closure receives and returns B instead of ResponseBody<B> types. #2201Into<Error> to Into<Response<AnyBody>>. #2253Into<Error> to Into<Box<dyn std::error::Error>>. #2253HttpServer::{listen_rustls(), bind_rustls()} now honor the ALPN protocols in the configuration parameter. [#2226]middleware::normalize now will not try to normalize URIs with no valid path #2246HttpResponse::take_body and old HttpResponse::into_body method that casted body type. #2201HttpResponse and HttpResponseBuilder types. #2065#[non_exhaustive]. #2148ContentDisposition that took T: AsRef<str> now take impl AsRef<str>.Header extractor for extracting common HTTP headers in handlers. #2094TestServer::client_headers method. #2097CustomResponder would return error as HttpResponse when CustomResponder::with_header failed instead of skipping. (Only the first error is kept when multiple error occur) #2093client mod was removed. Clients should now use awc directly. 871ca5e4actix-test crate. Namely these items from the test module: TestServer, TestServerConfig, start, start_with, and unused_addr. #2112cookies is now optional and enabled by default. #1981JsonBody::new returns a default limit of 32kB to be consistent with JsonConfig and the default behaviour of the web::Json<T> extractor. #2010actix-web-codegen to 0.5.0-beta.1.Either<web::Json<T>, web::Form<T>>::into_inner() which returns the inner type for whichever variant was created. Also works for Either<web::Form<T>, web::Json<T>>. #1894services! macro for helping register multiple services to App. #1933App #1933Responder trait to be sync and returns Response/HttpResponse directly. Making it simpler and more performant. #1891ServiceRequest::into_parts and ServiceRequest::from_parts can no longer fail. #1893ServiceRequest::from_request can no longer fail. #1893Either type now uses Left/Right variants (instead of A/B) #1894test::{call_service, read_response, read_response_json, send_request} take &Service in argument #1905App::wrap_fn, Resource::wrap_fn and Scope::wrap_fn provide &Service in closure argument. #1905web::block no longer requires the output is a Result. #1957App::data with the same type now keeps the latest call's data. #1906web::Path has been made private. #1894web::Query has been made private. #1894TestRequest::with_header; use TestRequest::default().insert_header(). #1869AppService::set_service_data; for custom HTTP service factories adding application data, use the layered data model by calling ServiceRequest::add_data_container when handling requests instead. #1906Compat middleware enabling generic response body/error type of middlewares like Logger and Compress to be used in middleware::Condition and Resource, Scope services. #1865actix-* dependencies to tokio 1.0 based versions. #1813rand to 0.8.rust-tls to 0.19. #1813Handler to HandlerService and rename Factory to Handler. #1852TrailingSlash is now Trim, in line with existing documentation. See migration guide for implications. #1875DefaultHeaders::{content_type => add_content_type}. #1875test::read_body_json's panic message. #1812middleware::{normalize, err_handlers}. All necessary middleware types are now exposed directly by the middleware module.actix-threadpool as dependency. actix_threadpool::BlockingError error type can be imported from actix_web::error module. #1878NormalizePath::default(), noting upcoming behavior change in v4. #2529unwrap on None panic in NormalizePathNormalization. #1762match_pattern() returning None for scope with empty path resource. #1798socket2 version. #1803actix-http dependency uses same serde_urlencoded.Either<A, B> extractor helper. #1788serde_urlencoded to 0.7. #1773exclude_regex for Logger middleware. #1723web::ReqData. #1748app_data to ServiceConfig. #1757on_connect for access to the connection stream before request is handled. #1754actix-web-codegen dependency for access to new #[route(...)] multi-method macro.Data<T> type when attempting extraction. #1743bytes::Buf{Mut} in web module. #1750pin-project to 1.0.TrailingSlash::MergeOnly behaviour to NormalizePath, which allows NormalizePath to retain any trailing slashes. #1695std::marker::Sized from web::Data to support storing Arc<dyn Trait> via web::Data::from #1710ResourceMap debug printing is no longer infinitely recursive. #1708NormalizePath when used with TrailingSlash::Trim no longer trims the root path "/". #1678middleware::normalize::TrailingSlash enum is now accessible. #16733.0.0-beta.4.middleware::NormalizePath now has configurable behavior for either always having a trailing slash, or as the new addition, always trimming trailing slashes. #1639FormConfig and JsonConfig configurations are now also considered when set using App::data. #1641HttpServer::maxconn is renamed to the more expressive HttpServer::max_connections. #1655HttpServer::maxconnrate is renamed to the more expressive HttpServer::max_connection_rate. #1655rustls to 0.18PayloadConfig is now also considered in Bytes and String extractors when set using App::data. #1610web::Path now has a public representation: web::Path(pub T) that enables destructuring. #1594ServiceRequest::app_data allows retrieval of non-Data data without splitting into parts to access HttpRequest which already allows this. #1618awc. #1621actix_rt::main as actix_web::main.HttpRequest::match_pattern and ServiceRequest::match_pattern for extracting the matched resource pattern.HttpRequest::match_name and ServiceRequest::match_name for extracting matched resource name.cookie crate. Actix-web no longer requires ring dependency.NormalizePath improved consistency when path needs slashes added and removed.Data<T> from Arc<T> #1509net2 crate with socket2{Resource,Scope}::default_service(f) handlers now support app data extraction. #1452std::error::Error for our custom errors #1422failure feature and support.TRACE method guard web::trace()test::read_body_json() and test::TestRequest::send_request() for testing.sha-1 crate instead of unmaintained sha1 crateStream #1308time dependency to 0.2.7actix-tls dependency to 2.0.0-alpha.1rustls dependency to 0.17Rename HttpServer::start() to HttpServer::run()
Allow to gracefully stop test server via TestServer::stop()
Allow to specify multi-patterns for resources
Move BodyEncoding to dev module #1220
Allow to set peer_addr for TestRequest #1074
Make web::Data deref to Arc<T> #1214
Rename App::register_data() to App::app_data()
HttpRequest::app_data<T>() returns Option<&T> instead of Option<&Data<T>>
AppConfig::secure() is always false. #1202test::start() and test::start_with()Migrated to std::future
Remove implementation of Responder for (). (#1167)
Payload::into_inner method and make stored def::Payload public. (#1110)Host guards when the Host header is unset (e.g. HTTP/2 requests) (#1129)Add Scope::register_data and Resource::register_data methods, parallel to App::register_data.
Add middleware::Condition that conditionally enables another middleware
Allow to re-construct ServiceRequest from HttpRequest and Payload
Add HttpServer::listen_uds for ability to listen on UDS FD rather than path, which is useful for example with systemd.
Make UrlEncodedError::Overflow more informative
Use actix-testing for testing utils
Re-implement Host predicate (#989)
Form implements Responder, returning a application/x-www-form-urlencoded response
Add into_inner to Data
Add test::TestRequest::set_form() convenience method to automatically serialize data and set the header in test requests.
Query payload made pub. Allows user to pattern-match the payload.
Enable rust-tls feature for client #1045
Update serde_urlencoded to 0.6.1
Update url to 2.1
Unix domain sockets (HttpServer::bind_uds) #92
Actix now logs errors resulting in "internal server error" responses always, with the error logging level
Logger middlewareAdd Responder impl for (T, StatusCode) where T: Responder
Allow to access app's resource map via ServiceRequest::resource_map() and HttpRequest::resource_map() methods.
rand dependency version to 0.7encoding_rs crate instead of unmaintained encoding crateMove cors middleware to actix-cors crate.
Move identity middleware to actix-identity crate.
Add support for PathConfig #903
Add middleware::identity::RequestIdentity trait to get_identity from HttpMessage.
Move cors middleware to actix-cors crate.
Move identity middleware to actix-identity crate.
Disable default feature secure-cookies.
Allow to test an app that uses async actors #897
Re-apply patch from #637 #894
Add Scope::configure() method.
Add ServiceRequest::set_payload() method.
Add test::TestRequest::set_json() convenience method to automatically serialize data and set header in test requests.
Add macros for head, options, trace, connect and patch http methods
Option<_> indirection around ServerBuilder from HttpServer. #863Fix Logger request time format, and use rfc3339. #867
Clear http requests pool on app service drop #860
Query<T>::from_query() to extract parameters from a query string. #846QueryConfig, similar to JsonConfig for customizing error handling of query extractors.JsonConfig is now Send + Sync, this implies that error_handler must be Send + Sync too.App::configure take an FnOnce instead of Fntest::block_fn()Extractor configuration could be registered with App::data() or with Resource::data() #775
Route data is unified with app data, Route::data() moved to resource level to Resource::data()
CORS handling without headers #702
Allow constructing Data instances to avoid double Arc for Send + Sync types.
NormalizePath middleware impl #806App::data_factory() is deleted.Add raw services support via web::service()
Add helper functions for reading response body test::read_body()
Add support for remainder match (i.e "/path/{tail}*")
Extend Responder trait, allow to override status code and headers.
Store visit and login timestamp in the identity cookie #502
.to_async() handler can return Responder type #792Add helper functions for reading test response body, test::read_response() and test::read_response_json()`
Add .peer_addr() #744
Add NormalizePath middleware
Rename RouterConfig to ServiceConfig
Rename test::call_success to test::call_service
Removed ServiceRequest::from_parts() as it is unsafe to create from parts.
CookieIdentityPolicy::max_age() accepts value in seconds
TestRequest::app_data()Allow using any service as default service.
Remove generic type for request payload, always use default.
Removed Decompress middleware. Bytes, String, Json, Form extractors automatically decompress payload.
Make extractor config type explicit. Add FromRequest::Config associated type.
TestBuffer for testing.App::configure() allow to offload app configuration to different methods
Added URLPath option for logger
Added ServiceRequest::app_data(), returns Data<T>
Added ServiceFromRequest::app_data(), returns Data<T>
FromRequest trait refactoring
Move multipart support to actix-multipart crate
Renamed TestRequest::to_service() to TestRequest::to_srv_request()
Renamed TestRequest::to_response() to TestRequest::to_srv_response()
Removed Deref impls
actix_web::web::md()Use forked cookie
Multipart::Field renamed to MultipartField
Complete architecture re-design.
Return 405 response if no matching route found within resource #538