HTTP/3 and QUIC

HTTP/3와 QUIC

QUIC streams reduce the chance that loss on one stream stalls unrelated streams.

···
html
<div class="n-demo"><div class="n-head"><strong>QUIC STREAM ISOLATION</strong><span>LIVE TRACE</span></div><div class="n-stage"><div class="quic"><div class="quic-row"><span>STREAM A</span><div><i id="q0"></i><b id="lost">LOSS</b></div></div><div class="quic-row"><span>STREAM B</span><div><i id="q1"></i></div></div><p id="q-note">independent delivery</p></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}}.quic{width:94%;display:grid;gap:12px}.quic-row{display:flex;align-items:center;gap:8px}.quic-row span{width:84px;font-size:12px}.quic-row div{flex:1;background:var(--bg);border-radius:6px;height:26px;position:relative}.quic-row i{display:block;background:var(--accent);height:100%;border-radius:6px;width:8%;transition:width .45s}.quic-row:nth-child(2) i{background:var(--accent-2)}.quic-row b{position:absolute;left:35%;top:2px;color:var(--accent-3);font-size:12px;opacity:0}.quic p{margin:0;text-align:center;color:var(--muted)}
js
let step=0;function advance(){const widths=[[20,20],[35,45],[35,70],[62,95]];document.getElementById('q0').style.width=widths[step][0]+'%';document.getElementById('q1').style.width=widths[step][1]+'%';document.getElementById('lost').style.opacity=step===1||step===2?'1':'0';document.getElementById('q-note').textContent=step===1||step===2?'A waits · B continues':'independent delivery';step=(step+1)%4}
const clickTarget=document.querySelector('.n-demo');if(clickTarget&&typeof advance==='function'){advance();const timer=setInterval(advance,1050);clickTarget.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})}

HTTP/3 carries requests and responses over QUIC. QUIC tracks ordering by stream, so loss in one stream need not block delivery on another.

The demo freezes the upper stream after a lost packet while the lower stream keeps moving. Shared congestion and bandwidth limits still apply to the connection.

When to use

Use it to compare HTTP/2 and HTTP/3 behavior for parallel resources on lossy networks.

Open as page ↗