4.3.25 · D5 · HinglishComputer Networks

Question bankHTTP - 2 — multiplexing, header compression (HPACK), server push

1,519 words7 min read↑ Read in English

4.3.25 · D5 · Coding › Computer Networks › HTTP - 2 — multiplexing, header compression (HPACK), server


True or false — justify karo

HTTP/2 multiplexing head-of-line blocking ko completely eliminate kar deta hai.
False. Ye application-layer HOL hata deta hai (streams ek doosre ka HTTP mein wait nahi karte), lekin single TCP connection ab bhi bytes in-order deliver karta hai, isliye ek lost packet saare streams ko stall kar deta hai — transport-layer HOL. HTTP-3-and-QUIC woh fix karta hai.
HTTP/2 GET, POST, status codes aur headers ka meaning badal deta hai.
False. Semantics HTTP-1.1 se identical hain; sirf wire format (text ki jagah binary framing) badla hai. 200 OK ka matlab ab bhi same hai.
HTTP/2 mein zyada parallel connections kholna ise faster banata hai, jaise HTTP/1.1 mein hota tha.
False. HTTP/1.1 ko parallelism fake karne ke liye ~6 connections chahiye the; HTTP/2 ek connection chahta hai taaki ek single warmed-up congestion window mile aur chhe ki jagah ek hi TCP+TLS handshake ho.
HPACK essentially header block pe gzip apply karna hai.
False. Gzip attacker-controlled aur secret bytes ko mix karta hai, aur uski output length secrets leak karti hai (CRIME-and-BREACH-attacks). HPACK ek static/dynamic index table plus ek fixed Huffman-Coding table use karta hai, us adaptive context-mixing se bachte hue.
Client-initiated streams aur server-pushed streams ek hi Stream ID share kar sakte hain.
False. Clients odd IDs use karte hain, servers even IDs use karte hain, isliye same connection pe dono ID spaces kabhi collide nahi karte.
Server push hamesha page loads ko speed up karta hai.
False. Agar server ek aisi resource push kare jo browser ne already cache kar rakhi hai, toh bandwidth waste hoti hai aur real HTML ka congestion window chura liya jaata hai. Mis-tuned push aksar nuksan karta tha, isliye Chrome ne ise drop kar diya.
Ek single HTTP/2 frame unlimited amount of data carry kar sakta hai.
False. 24-bit Length field bytes tak allow karta hai, lekin default maximum hai taaki koi single frame link ko monopolize na kare.
Dynamic table server ke saare HTTP/2 connections mein globally shared hoti hai.
False. Dynamic table per-connection hoti hai; encoder aur decoder dono apni-apni copy maintain karte hain jo us ek connection pe headers dekhe jaane par evolve hoti hai.
HPACK ki Huffman table adaptively rebuild hoti hai jaise-jaise wo tumhare headers dekhti hai.
False. HPACK ek fixed, spec-defined Huffman code use karta hai jo typical HTTP header characters ke liye optimize hai. Static hona hi ise CRIME-resistant banata hai, adaptive coding ke unlike.
Prefix-integer encoding HPACK ke liye unique hai.
False. Ye wahi 7-bit continuation idea hai jo Varint-encoding aur kaafi binary protocols mein use hota hai — chhote numbers inline fit ho jaate hain, bade ones continuation bytes mein spill karte hain jinka high bit matlab hai "aur aane wale hain".

Error dhundho

"Server push style.css deliver karne ke liye client ke stream par ek DATA frame bhejta hai."
Galat frame aur stream. Server pehle client ke stream par ek PUSH_PROMISE bhejta hai ek naya even stream ID reserve karne ke liye, phir us naye stream par pushed resource ke liye HEADERS+DATA deliver karta hai.
"'Ye header poori tarah table mein hai' signal karne ke liye HPACK do leading bits 01 set karta hai."
Galat pattern. Ek akela leading 1 bit fully indexed representation mark karta hai. 01 prefix literal with incremental indexing mark karta hai (ek naya header yaad rakhne ke liye).
"Kyunki Stream ID 31 bits ka hai, ID byte ka top bit tumhe odd ya even streams choose karne deta hai."
Top bit ek reserved (R) bit hai, chooser nahi. Odd/even sirf 31-bit ID value ki parity hai — clients odd choose karte hain, servers even choose karte hain.
"HPACK index 10 ko 5-bit prefix mein 31, 10 store karta hai kyunki tum hamesha pehle max emit karte ho."
Galat. , isliye ye seedha 5 bits mein 0b01010 fit ho jaata hai. Tum tabhi pehle emit karte ho jab value prefix overflow kare.
"HTTP/2 mein ek message ek frame hota hai."
Ek message (ek request ya response) ek HEADERS frame plus zero ya zyada DATA frames hota hai, sab ek hi Stream ID share karte hue. Ye generally kaafi frames hote hain.
"gzip headers ke liye safe hai jab tak hum cookie ko alag compress karein."
Khatara algorithm se nahi balki length-based leakage se hai jab secret aur attacker-influenced data ek saath compress hote hain; HPACK ka design (static table pe indexing) asli fix hai, alag se compress karna nahi.

Why questions

HTTP/2 messages ko frames mein kyun kaatta hai, poora message ek saath bhejna ke bajaye?
Taaki kaafi messages ek connection par interleave ho sakein — labeled chunks (Stream ID se) ek slow response ko wire yield karne dete hain ready walon ko, application-layer HOL blocking khatam kar ke.
Default max frame size poore 24-bit maximum ki jagah 16 KB kyun hai?
Kisi bhi single frame ko shared connection monopolize karne se rokne ke liye; chhote frames interleaving ko fair rakhte hain taaki koi stream doosron ko starve na kare.
HPACK 61 entries ki ek static table ke saath kyun bother karta hai?
Sabse common headers (:method GET, :status 200, etc.) advance mein known hote hain, isliye inhe pehli request se hi ek single index byte ke roop mein bheja ja sakta hai — koi learning phase nahi chahiye.
SPDY ki naive header compression CRIME attack kyun leki?
Kyunki ek secret (cookie) ko attacker-chosen text ke saath compress karne par compressed length depend karti thi ki guess secret se kitna match kiya, ise byte by byte leak kar ke. Dekho CRIME-and-BREACH-attacks.
Shared congestion window HTTP/2 ki madad kyun karta hai?
Ek connection matlab ek properly-warmed TCP congestion window jo bada rehta aur grow karta hai, chhe chhote cold windows ki jagah jo slow-start se restart karte hain.
Modern browsers ne server push ko 103 Early Hints ke favor mein kyun deprecate kiya?
Push blindly resources dobara bhejta hai jinhein browser cache kar chuka hota hai aur bandwidth ke liye compete karta hai; 103 Early Hints + <link rel=preload> browser ko decide karne deta hai kya fetch karna hai, waste se bachte hue.

Edge cases

HTTP/2 mein agar exactly ek TCP packet das streams ke transfer ke beech mein lost ho jaye toh kya hoga?
Saare das streams tab tak stall ho jaate hain jab tak TCP us packet ko retransmit na kare, kyunki TCP in-order byte delivery guarantee karta hai — yahi transport-level HOL hai jo HTTP-3-and-QUIC remove karta hai.
HPACK kya karta hai jab ek header value bilkul nayi ho aur yaad nahi rakhni chahiye?
Ye ek literal without indexing (ya never-indexed) representation use karta hai — Huffman-encoded bheja jaata hai lekin dynamic table mein add nahi hota, taaki table space waste na ho ya index hone ka risk na ho.
Agar dynamic table bhar jaye toh purani entries ka kya hota hai?
Entries oldest-first evict hoti hain negotiated size limit ke andar rehne ke liye; kisi entry ko evict karna sirf itna matlab hai ki us header ki agli occurrence phir literal ke roop mein bheji jaayegi.
Agar server ek aisi resource push kare jo client explicitly nahi chahta toh kya?
Client pushed (even) stream par RST_STREAM bhej ke use cancel kar sakta hai — lekin in-flight frames par already kharch bandwidth waste ho jaati hai, ek kaaran push favor se bahar ho gaya.
-bit prefix mein exactly ke barabar index encode karna — kya ye inline fit hota hai?
Nahi. Rule hai if I < 2^N - 1 inline fit hota hai; overflow path trigger karta hai: prefix mein store karo, phir ek single continuation byte mein .
Recall Pure trap set ka ek-sentence summary

HTTP/2 application-layer HOL aur header bloat fix karta hai, lekin transport HOL nahi (woh QUIC hai), aur iske "obvious" wins — push aur gzip-style compression — exactly wahi jagah hain jahan ye tumhe kaatta hai.