Zstandard HTTP 압축

Zstandard HTTP compression

HTTP Content-Encoding: zstd로 응답 본문을 압축해 전송하고 브라우저에서 복원합니다.

···
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는 HTTP Content-Encoding에 사용할 수 있는 압축 방식입니다. 클라이언트가 지원하는 인코딩을 알리면 서버는 적절한 방식으로 응답 본문을 압축하고 수신 측은 복원합니다.

데모는 원본 본문이 압축 블록으로 줄어 전송되고 브라우저에서 다시 원래 크기로 풀리는 흐름을 보여줍니다. 압축 효과는 데이터와 설정에 따라 달라지므로 막대 길이는 개념도입니다.

언제 쓰나

텍스트 응답의 전송량을 줄일 때 클라이언트 지원, CPU 비용, 캐시의 인코딩별 변형을 함께 확인합니다.

페이지로 열기 ↗