Zstandard HTTP compression

Zstandard HTTP 압축

Content-Encoding: zstd transfers a compressed response body and decodes it in the browser.

···
html
<div class="n-demo"><div class="n-head"><strong>ZSTD RESPONSE ENCODING</strong><span>LIVE TRACE</span></div><div class="n-stage"><div class="zstd"><div class="zstd-col"><span>ORIGIN</span><i id="z0"></i></div><div class="zstd-col"><span>WIRE · zstd</span><i id="z1"></i></div><div class="zstd-col"><span>BROWSER</span><i id="z2"></i></div><div id="z-note">encode → transfer → decode</div></div></div><div class="n-foot">tap to step · auto replay</div></div>
css
.n-demo{width:min(94vw,760px);height:min(88vh,324px);padding:clamp(9px,2.2vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(5px,1.3vmin,10px);font:600 clamp(12px,2.4vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;overflow:hidden}.n-head,.n-foot{display:flex;justify-content:space-between;align-items:center;color:var(--muted)}.n-head strong{color:var(--accent)}.n-head span,.n-foot{font-size:12px}.n-stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center;gap:clamp(4px,1vmin,10px)}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.n-box{padding:clamp(5px,1.5vmin,11px);border:1px solid var(--line);border-radius:8px;background:var(--bg);text-align:center}.n-on{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.n-muted{color:var(--muted)}@media(max-width:400px){.n-head span{display:none}}.zstd{width:94%;display:grid;grid-template-columns:repeat(3,1fr);align-items:end;gap:7px}.zstd-col{height:84px;border:1px solid var(--line);border-radius:7px;display:flex;flex-direction:column;justify-content:flex-end;gap:5px;padding:6px;background:var(--bg)}.zstd-col span{font-size:12px}.zstd-col i{height:13px;width:0;background:var(--accent);border-radius:3px;transition:width .5s}.zstd-col:nth-child(2) i{background:var(--accent-2)}#z-note{grid-column:1/-1;text-align:center;color:var(--muted)}
js
let step=1;function advance(){const bars=[[85,0,0],[85,36,0],[85,36,85]];bars[step].forEach((v,i)=>document.getElementById('z'+i).style.width=v+'%');document.getElementById('z-note').textContent=['source body','encoded bytes on wire','decoded body'][step];step=(step+1)%3}
const clickTarget=document.querySelector('.n-demo');if(clickTarget&&typeof advance==='function'){advance();const timer=setInterval(advance,1050);clickTarget.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})}

Zstandard can be used as an HTTP Content-Encoding. A client advertises supported encodings, the server compresses the response body, and the receiver decodes it.

The demo shrinks a schematic payload for transfer and restores it in the browser. Actual compression depends on data and settings; the bars are illustrative.

When to use

When reducing text transfer, check client support, CPU cost, and cache variants for each encoding.

Open as page ↗