pub struct ServerConfig {Show 15 fields
pub cors_allow_all: bool,
pub cors_allow_origins: String,
pub cors_allow_credentials: String,
pub cors_allow_methods: String,
pub cors_allow_headers: String,
pub cors_expose_headers: String,
pub cors_max_age: String,
pub csp: String,
pub security_headers: bool,
pub nanos_headers: bool,
pub client_hints: bool,
pub static_cache_control: String,
pub directory_listing: bool,
pub log_format: String,
pub request_allocation_size: i64,
}Expand description
All runtime-configurable settings for one server instance.
Fields map 1-to-1 to RWS_CONFIG_* environment variable names documented
in Config. Default values match the environment-variable defaults.
Construct via ServerConfig::from_env() at startup or
ServerConfig::default() in tests.
Fields§
§cors_allow_all: boolRWS_CONFIG_CORS_ALLOW_ALL — when true, all cross-origin requests are
reflected back as allowed (echo the Origin header). Overrides all
other CORS fields. Default: true.
cors_allow_origins: StringRWS_CONFIG_CORS_ALLOW_ORIGINS — comma-separated list of allowed
origins when cors_allow_all is false. Default: "" (none).
cors_allow_credentials: StringRWS_CONFIG_CORS_ALLOW_CREDENTIALS — value for the
Access-Control-Allow-Credentials response header. Default: "".
cors_allow_methods: StringRWS_CONFIG_CORS_ALLOW_METHODS — value for
Access-Control-Allow-Methods. Default: "".
cors_allow_headers: StringRWS_CONFIG_CORS_ALLOW_HEADERS — value for
Access-Control-Allow-Headers. Default: "".
cors_expose_headers: StringRWS_CONFIG_CORS_EXPOSE_HEADERS — value for
Access-Control-Expose-Headers. Default: "".
cors_max_age: StringRWS_CONFIG_CORS_MAX_AGE — value for Access-Control-Max-Age.
Default: "86400".
csp: StringRWS_CONFIG_CSP — Content-Security-Policy header value. An empty
string suppresses the header. Unset: default-src 'self' when
security_headers is on, otherwise no header
(18.0.0; was always default-src 'self').
security_headers: boolRWS_CONFIG_SECURITY_HEADERS — send X-Frame-Options: SAMEORIGIN,
Referrer-Policy and Permissions-Policy on every response (and the
default CSP, unless RWS_CONFIG_CSP is set). Off by default (18.0.0;
was always on): nginx sends none of them, and over HTTP/2 every header
costs HPACK work. X-Content-Type-Options: nosniff is always sent.
nanos_headers: boolRWS_CONFIG_NANOS_HEADERS — send Date-Unix-Epoch-Nanos and, for
static files, Last-Modified-Unix-Epoch-Nanos. Off by default (18.0.0;
was always on): they change on every response, so HTTP/2 can’t index
them, and Date/Last-Modified carry the same information to the second.
client_hints: boolRWS_CONFIG_CLIENT_HINTS — send Accept-CH, Critical-CH and the
client hints in Vary on every response. Off by default (18.0.0; was
always on): ~700 bytes per response, and Critical-CH makes Chromium
retry a request that came without the hints.
static_cache_control: StringRWS_CONFIG_STATIC_CACHE_CONTROL — Cache-Control for static files
(other responses keep no-store, …). Default "no-cache" (18.0.0; was
no-store, …): browsers keep the file and revalidate it with
If-None-Match / If-Modified-Since (a 304). An empty value keeps
the no-store default for static files too.
directory_listing: boolRWS_CONFIG_DIRECTORY_LISTING — list a directory that has no
index.html. Default true; false answers 404 instead (18.8.4).
log_format: StringRWS_CONFIG_LOG_FORMAT — "json" or "combined". Default: "json".
request_allocation_size: i64RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES — bytes allocated for
incoming request parsing. Default: 10000.
Implementations§
Source§impl ServerConfig
impl ServerConfig
Sourcepub fn from_env() -> Self
pub fn from_env() -> Self
Build a ServerConfig by reading all RWS_CONFIG_* environment
variables. Missing variables fall back to their default values.
Each call reads every variable — the environment lock is taken once
per variable — so per-request code uses ServerConfig::current.
Sourcepub fn current() -> Arc<ServerConfig> ⓘ
pub fn current() -> Arc<ServerConfig> ⓘ
The configuration from the environment, read once and shared: an
atomic load and an Arc clone per call instead of ten getenvs.
Rebuilt after invalidate — which config_reload::reload() (SIGHUP,
POST /admin/config/reload) and every config writer in the crate call,
so hot reload still takes effect on the next request.