http.compressionThreshold: docs say default 1200, shipped config sets 0 (compression off by default)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
- Tipo di issue
- Documentazione
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- documentation
Direzione di ricerca
Inizia esaminando le quattro posizioni della documentazione citate e confermando con il responsabile di static/defaultConfig.yaml di Harper se compressionThreshold: 0 è intenzionale. Verifica quindi l’incoerenza corrispondente di Harper e il problema dello stream in #655 prima di aggiornare in modo coerente tutti i valori documentati; il lavoro è completato quando la decisione tra repository è registrata e le quattro pagine corrispondono al comportamento distribuito.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What's wrong
The docs state that http.compressionThreshold defaults to 1200 bytes, so Brotli response compression is on out of the box. Harper's shipped configuration sets it to 0, and the runtime treats 0 as "off" — so on a default install, Brotli response compression never happens.
The root cause is not in this repo. Harper contradicts itself, and our docs faithfully mirror the half of it that isn't what actually ships.
Evidence (harper origin/main)
| Location | Says |
|---|---|
config-root.schema.json:25-31 |
property description: "Responses larger than this threshold (bytes) will be compressed... Default: 1200" |
config-root.schema.json:774 |
examples block: "compressionThreshold": 1200 |
static/defaultConfig.yaml:4 |
compressionThreshold: 0 — this is what gets written into a new install's config |
validation/configValidator.ts:329 |
compressionThreshold: number.optional() — no default injected |
server/serverHelpers/contentTypes.ts:362 |
const COMPRESSION_THRESHOLD = envMgr.get(CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD) — no || fallback, so a configured 0 stays 0 |
server/serverHelpers/contentTypes.ts:373 |
canCompress = COMPRESSION_THRESHOLD && request.headers...includes('br') — 0 is falsy, so compression is skipped entirely |
So the schema documents 1200, the shipped template sets 0, and the runtime honors 0. There is no code-level 1200 default anywhere.
Note this is specifically http.compressionThreshold. The unrelated storage.compressionThreshold (LMDB record compression) does have a real code default — (storage.pageSize || 4096) - 60 at resources/databases.ts:102 — which makes this easy to conflate when grepping.
Affected pages in this repo
reference/configuration/options.md:37- "Default:1200(bytes)"reference/http/configuration.md:111- thehttp.compressionThresholdsection, plus1200in examples at:123and:318reference/http/overview.md:104- "Compression applies when the response body exceeds the configuredcompressionThreshold(default 1200 bytes)"reference/configuration/operations.md:106-"compressionThreshold": 1200in a config response example
The question that has to be answered first
Is compressionThreshold: 0 in the shipped config intentional? The docs fix depends entirely on the answer, and the two outcomes are very different:
- If 0 is a bug in harper - Brotli compression has been silently off for every default install. That is the real finding here, and the fix belongs in
static/defaultConfig.yaml. Our docs then need no change beyond possibly noting the versions affected. - If 0 is intentional - then harper's own schema description and examples are wrong too, and our four locations should say compression is disabled by default and must be explicitly enabled. In that case
config-root.schema.jsonshould be corrected alongside.
Either way one of the two harper locations is wrong, so this likely wants a companion harper issue; transferring or cross-linking is fine.
Why it matters beyond a wrong number
Two things downstream depend on this:
- Anyone following our docs believes responses over 1200 bytes are compressed. If they are not, that is a real and invisible performance difference on a default install.
- There is a latent crash gated behind this setting.
contentTypes.ts:410-425pipesserializeStream's return value intocreateBrotliCompress()whenevercanCompressis true, but theapplication/x-msgpackhandler returns aBuffer(not a stream) for a plain array.Accept: application/x-msgpack+Accept-Encoding: br+ an array body would throwTypeError: stream.pipe is not a function. That is currently unreachable only because compression ships disabled - so if the default is "corrected" to 1200 without fixing the pipe path first, this becomes reachable the same day. Sequencing matters. Surfaced in #655.
Suggested fix
- Get a ruling from whoever owns
static/defaultConfig.yamlon whether 0 is intended. - Fix harper's inconsistency (either the shipped default or the schema description + examples).
- Update the four locations above to match, in one pass so they cannot disagree with each other.
- Track the
.pipe()normalization separately, and land it before any change that turns compression on by default.
sent with Claude Opus 5
- Lingua principale
- MDX
- Stelle
- 9
- Fork
- 9
- Merge medio
- 2g 3h
- PR unite (30g)
- 30
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di HarperFast/documentation
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
HarperFast/documentation#677 ·
-
Document markCredentialRejection / credentialRejectionError, the server.getUser rejection tag Aperta
Difficoltà 2/5 Mezza giornata Idoneità per principianti 88/100
HarperFast/documentation#675 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
HarperFast/documentation#665 ·
-
Add Harper deploy behavior Apertacontent
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
HarperFast/documentation#478 ·
-
content
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
HarperFast/documentation#399 · 2 commenti ·
Tutte le issue di HarperFast/documentation
Issue simili
-
Crush Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
catppuccin/catppuccin#3125 ·
-
Link Checker Report Apertaautomated issue report
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
VoltAgent/awesome-design-md#469 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
KhronosGroup/glTF#2648 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
sccn/sccn.github.io#108 ·