Maven hosted: If-None-Match is never evaluated on GET/HEAD
Summary
Hosted Maven reads ignore If-None-Match: a GET/HEAD for a primary file or
checksum sidecar answers 200 with the full body even when the request's
If-None-Match matches the response's own ETag (including * and weak
W/ forms). The remote (kind=2) Maven path answers a matching conditional
with a bodyless 304. Confirmed on the closed-beta pre-release test run
against a local build of origin/main.
Impact
- No correctness failure: Maven clients do not depend on
304, and digests verify through the sidecar path. - Bandwidth waste for caching clients, and a hosted
↔️ remote inconsistency — the same request shape behaves differently on the two repository kinds although they share the URL space and emit the same ETag shape.
Expected behavior
Per RFC 9110 §13.1.2, a matching If-None-Match on GET/HEAD should answer a
bodyless 304 carrying the ETag, with no download counter (no delivery) and
the hosted access signal still recorded.
Fix
Prescribed in docs/specs/S10 amendment (!2023 (merged)); the implementation MR reuses
the remote path's matching helpers (ifNoneMatchMatches /
ifNoneMatchSatisfied).