Repository navigation
Releases
Releases · 0then0/rangeprobe
RangeProbe 0.3.0
Added
- Separate
rangeprobe if-range URLCLI mode for bounded baseline, matching strong
and random mismatching strong entity-tag probes. Conditional range support,
observed 200 fallback, confirmed violations and insufficient evidence are separate. - Opt-in
--weak-if-rangeconformance probe, explicitly labelled deliberately invalid
client input, and a reproducible historical Starlette #3567 parent/fixed lab with
pinned validation dependencies and an independent status/header/byte oracle. - Additive schema-1 If-Range evidence: exact validator octets in base64, final-request
forwarding evidence, condition, identity, per-probe outcomes and run axes. No raw
body capture or new Go runtime dependencies.
Changed
- If-Range mode rejects If-Match preconditions and other user precondition headers;
managed If-Range is stripped across origins under the existing credential policy. - This new mode gives incomplete evidence priority over allowed ignored Range in exit
codes; legacy modes and old report meaning are preserved. Full-body observation is
bounded and explicitly partial when cut off, independently of a successful fallback.
RangeProbe 0.2.0
Added
- A static browser page (
web/) that sends the key checks from the browser withfetch()
(credentials: omit, bounded reads, deadlines, cancel), compares the bytes with slices of a
local reference file and saves a JSON report. It reports the byte comparison and the header
evidence it could read as two separate results, and says what a page cannot see (CORS-hidden
headers, automatic content decoding, the cause of a rejected fetch). Seedocs/browser.md. - Four diagnostics that only the page emits:
CONTENT_RANGE_NOT_VISIBLE,
ENCODING_DECODED_BY_BROWSER,ENCODING_NOT_OBSERVABLE,FETCH_REJECTED. testdata/shared: planner and judging cases that the CLI (internal/parity) and the page
(web/test) both must satisfy.lab/browser: a local stand with two origins and reproducible routes (correct, hidden
Content-Range, no CORS, wrong bytes, ignored Range with a 256 MiB response, slow headers and
body, gzip).
Changed
- The conditions of
BYTES_MISMATCH_REFERENCE,STATUS_206_NO_CONTENT_RANGE,
NUMBER_OUT_OF_RANGEandCANCELLEDnow state their meaning for both capture modes. The CLI's
behaviour is unchanged.
RangeProbe 0.1.1
Fixed
- Long ETags no longer produce false conclusions. Two different ETags that began alike were
shortened for display and then compared as equal, which reported a replaced file as
OVERLAP_INCONSISTENTorREREAD_INCONSISTENT. ETags are now compared in full; a changed
ETag makes the affected comparisonsinconclusive. --preconditionssent the shortened ETag inIf-Matchand got412from an unchanged
resource. The complete value is sent now.- An ETag that is repeated, malformed or longer than 8000 octets is no longer treated as a
strong validator: it gives no strong evidence and is never sent inIf-Match.
WEAK_VALIDATORSnames the reason inetag_problem. - An ETag cut for display in a report now ends with a short SHA-256 of the whole value.
RangeProbe 0.1.0
First version.
Added
rangeprobe reference URL FILE: sends a bounded set of single-range requests and compares
the response bytes with the matching slices of a local reference file, streaming, without
loading the file into memory.rangeprobe observe URL: checks status and header consistency, body length against the
declared length, and agreement of overlapping and repeated reads, without claiming that
any bytes are correct.- Ten checks: first byte, start, middle, end, suffix range, open-ended range, last-pos beyond
EOF, unsatisfiable range, overlapping ranges, re-read. - Findings with stable IDs, required conditions, concrete evidence and stated limits
(docs/diagnostics.md). - A full
200answer to a range request is reported asrange_ignored(exit code 2), not as an
RFC violation. - Representation tracking: a changed strong ETag, length, Last-Modified or content coding
makes the affected comparisons inconclusive instead of reporting a server defect. - Hard limits on requests, total bytes, bytes per response, per-request and total time, and
redirects. Large or endless responses are cut off at the limit. - Redirect policy: bounded hops, no HTTPS to HTTP downgrade, user headers and
If-Matchdropped
on cross-origin redirects, noReferer. TLS verification is always on. - Text summary, versioned JSON report (schema 1) and standalone HTML report. URL query values,
credentials and local directories are redacted by default. Reports are written atomically and
never overwrite existing files without--force. - Exit codes: 0 pass, 1 confirmed problem, 2 range ignored, 3 incomplete, 64 usage, 70 run error,
130 interrupted. - RustFS lab for rustfs/rustfs#2506 in
lab/rustfs
with results (docs/lab/rustfs-2506.md). - Release packaging for Linux, macOS and Windows (amd64, arm64) with
SHA256SUMS.