pub struct RequestLimits {
pub max_body_bytes: Option<u64>,
pub max_header_count: Option<u32>,
pub max_header_bytes: Option<u64>,
pub dry_run: bool,
}Expand description
Route-scoped request size limits (DW-027, feature analysis 4.16).
Semantics (frozen; enforcement lives in dataplane::hardening):
- Header limits (
max_header_count,max_header_bytes) are checked immediately after route resolution, before CORS preflight handling and authentication; a violation answers 431 with the JSON error envelope.max_header_bytesis the SUM of all header name and value bytes of the request (hyper’s per-connection buffer limits still apply beneath this, process-wide). max_body_bytes: a request whoseContent-Lengthdeclares more is rejected 413 before any upstream contact. A body of UNKNOWN length (chunked / h2 without content-length) is wrapped in a counting guard: crossing the cap aborts the request (the upstream attempt fails; the client receives 413 when the failure precedes the upstream’s response headers, a torn stream otherwise).- A block with NO field set is rejected by validation (always an authoring mistake; omit the block).
Fields§
§max_body_bytes: Option<u64>Maximum request body size in bytes (declared via Content-Length
or enforced streaming). Absent: unlimited.
max_header_count: Option<u32>Maximum number of header fields on the request. Absent: unlimited (hyper’s parser bound applies).
max_header_bytes: Option<u64>Maximum total size of request headers (names + values, bytes). Absent: unlimited.
dry_run: boolMonitor mode (DW-041): evaluate the limits, LOG and count every
would-be rejection (dwara_policy_dry_run_total{phase="route_ limits"} + a dwara::policy warn event), but let the request
PROCEED — including its body: the streaming max_body_bytes guard
is not armed, so a chunked body that would have been aborted mid-
stream streams through (only the cheap up-front checks — header
count/bytes, a declared Content-Length — are observable in dry
run). The staging tool for turning limits on against live traffic
without breaking clients.
Trait Implementations§
Source§impl Clone for RequestLimits
impl Clone for RequestLimits
Source§fn clone(&self) -> RequestLimits
fn clone(&self) -> RequestLimits
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RequestLimits
impl Debug for RequestLimits
Source§impl<'de> Deserialize<'de> for RequestLimits
impl<'de> Deserialize<'de> for RequestLimits
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for RequestLimits
impl JsonSchema for RequestLimits
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for RequestLimits
impl PartialEq for RequestLimits
Source§impl Serialize for RequestLimits
impl Serialize for RequestLimits
impl Copy for RequestLimits
impl Eq for RequestLimits
impl StructuralPartialEq for RequestLimits
Auto Trait Implementations§
impl Freeze for RequestLimits
impl RefUnwindSafe for RequestLimits
impl Send for RequestLimits
impl Sync for RequestLimits
impl Unpin for RequestLimits
impl UnwindSafe for RequestLimits
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more