pub struct SecurityHeaders {
pub hsts_max_age_secs: Option<u64>,
pub hsts_include_subdomains: bool,
pub hsts_preload: bool,
pub nosniff: bool,
pub content_security_policy: Option<String>,
pub frame_options: Option<FrameOptions>,
}Expand description
Security-header injection policy (DW-028, feature analysis 5-Security “security header injection”). Each field that is present injects (REPLACING any upstream-sent value — the gateway is the source of truth at its edge) exactly one standard hardening header on every response the route emits, including gateway short-circuits (401/403/413/429/503, CORS preflights): unlike deprecation stamps, these harden every byte the edge sends, and a browser parsing an error page deserves the same guarantees as one parsing a 200.
Not on responses with no route to consult: the framing 400 (the pre-parse sniff rejects the request before any route exists) and unrouted 404s.
Fields§
§hsts_max_age_secs: Option<u64>Emit Strict-Transport-Security: max-age=<secs> (RFC 6797) on
every response of the route. The presence of this field is the
policy; 0 is rejected (max-age=0 is the spec’s deletion signal,
a state this policy cannot express — delete the field instead).
hsts_include_subdomains: boolAppend the includeSubDomains directive to the HSTS header
(meaningful only with hsts_max_age_secs; rejected alone by
validation).
hsts_preload: boolAppend the preload directive to the HSTS header (the HSTS
preload-list signal; meaningful only with hsts_max_age_secs
and, per the preload list requirements, with
hsts_include_subdomains; that combination is enforced by
validation).
nosniff: boolEmit X-Content-Type-Options: nosniff (the MIME-sniffing
off-switch; the only value the header has).
content_security_policy: Option<String>Emit Content-Security-Policy: <policy> verbatim (the operator
authors the policy; non-empty and header-representable,
validation — a trailing newline or other control byte is
rejected rather than silently not emitted).
frame_options: Option<FrameOptions>Emit X-Frame-Options (legacy but still load-bearing for older
browsers). ALLOW-FROM is obsolete and deliberately absent.
Trait Implementations§
Source§impl Clone for SecurityHeaders
impl Clone for SecurityHeaders
Source§fn clone(&self) -> SecurityHeaders
fn clone(&self) -> SecurityHeaders
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SecurityHeaders
impl Debug for SecurityHeaders
Source§impl<'de> Deserialize<'de> for SecurityHeaders
impl<'de> Deserialize<'de> for SecurityHeaders
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 SecurityHeaders
impl JsonSchema for SecurityHeaders
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 SecurityHeaders
impl PartialEq for SecurityHeaders
Source§impl Serialize for SecurityHeaders
impl Serialize for SecurityHeaders
impl StructuralPartialEq for SecurityHeaders
Auto Trait Implementations§
impl Freeze for SecurityHeaders
impl RefUnwindSafe for SecurityHeaders
impl Send for SecurityHeaders
impl Sync for SecurityHeaders
impl Unpin for SecurityHeaders
impl UnwindSafe for SecurityHeaders
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<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