Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 26 additions & 26 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ categories = ["network-programming", "web-programming::http-server"]

# 二进制走 CalVer,crate 走 SemVer —— 两者是两回事,卖给不同的人。
# 这里是 crate 的版本。
version = "0.79.0"
version = "0.80.0"

[workspace.dependencies]
# ── 内部 crate ───────────────────────────────────────────
Expand Down
21 changes: 21 additions & 0 deletions release-notes/0.80.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
This release records requests that are refused before they reach any upstream, so a mistyped or unavailable model name shows up in the request records instead of disappearing.

**Upgrade notes**

- The control-plane protocol version stays at 51, and the request store's schema is unchanged; nothing is cleared.
- No configuration key is added, renamed or removed.

**Refused requests are recorded.** Once the gateway key is recognized, a request that goes to no upstream now gets a request record and the usual `RequestStarted`, `RequestRouted` and `RequestFailed` events, the same way a request denied by a rule already did. This covers:

- a model name that does not exist, is not allowed for the key, or whose alias or specified model does not resolve (`gw.model.*`);
- a request no rule decided on, or whose rules could not be evaluated (`gw.route.failed`);
- a request made before any upstream is configured (`gw.config.no_upstreams`);
- on a Responses WebSocket connection, each turn refused for the same reasons, and a Realtime upgrade refused for its model or its route.

The record holds the model name the client sent, the error code with its arguments, the key and the route. The upstream and the attempts are empty, and so is the rule when no rule decided. The status code the client receives and the error body are unchanged; the body is now sent chunked instead of with `Content-Length`, as it already was for requests denied by a rule.

Requests refused before the key is recognized (no key, an invalid or disabled key, a source address that is not allowed) are still not recorded.

Route statistics count these records under their route and no longer list an empty rule name.

**Security.** `rustls-webpki` is updated to 0.103.16 for RUSTSEC-2026-0382 (certificate verification could accept distrusted intermediates), and `webpki-root-certs` to 1.0.10 for RUSTSEC-2026-0383 (the bundled roots trusted distrusted emSign intermediates).
Loading