v0.35.1: performance, AGPL licensing and documentation overhaul

- Web Server reads static files inline; proxy middleware chain flattened
- About window with license summary and project links; AGPL-3.0-or-later
- Rewritten documentation: feature list, screenshots, performance guide
- Fix false spikes in per-Vhost request-rate charts
This commit is contained in:
gru committed 2026-11-05 18:29:56 +01:00
1 parent d3b492874b
commit eba9f89283
135 files changed
+1425 -1064

No files matched your search

+7 -8
View File
@@ -22,9 +22,9 @@ impl Cache {
if cached.body.len() > settings.max_object_bytes {
return None;
}
if !headers.contains_key("date") {
if !headers.contains_key(::http::header::DATE) {
if let Ok(value) = httpdate::fmt_http_date(SystemTime::now()).parse() {
headers.insert("date", value);
headers.insert(::http::header::DATE, value);
}
}
headers.remove("x-request-id");
@@ -34,11 +34,11 @@ impl Cache {
let vary = plan.vary.clone();
let tags = cache_tags(&headers);
let origin_etag = validation_headers
.get("etag")
.get(::http::header::ETAG)
.cloned()
.or_else(|| cached.origin_etag.clone());
let origin_last_modified = validation_headers
.get("last-modified")
.get(::http::header::LAST_MODIFIED)
.cloned()
.or_else(|| cached.origin_last_modified.clone());
let cost = hot_entry_cost(
@@ -98,8 +98,7 @@ impl Cache {
}
self.counters.hits.fetch_add(1, Ordering::Relaxed);
let mut response = cached.response(headers);
response.headers_mut().insert(
"age",
response.headers_mut().insert(::http::header::AGE,
HeaderValue::from_str(&age.to_string()).expect("integer header"),
);
Some(Hit {
@@ -156,11 +155,11 @@ impl Cache {
.cloned();
let origin_etag = match origin_validators.as_ref() {
Some(validators) => validators.etag.clone(),
None => headers.get("etag").cloned(),
None => headers.get(::http::header::ETAG).cloned(),
};
let origin_last_modified = match origin_validators.as_ref() {
Some(validators) => validators.last_modified.clone(),
None => headers.get("last-modified").cloned(),
None => headers.get(::http::header::LAST_MODIFIED).cloned(),
};
let transformed = parts
.extensions