Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-08.03

HTTP/3 ve QUIC

HTTP/3, QUIC stream’lerini HTTP exchange’lerine bağlar. Independent delivery bütün dependency’leri kaldırmaz: aynı stream gap’i ve QPACK context’i ayrı bekleme noktalarıdır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

QUIC stream gap

  1. Responses başlıyor

    Established contexts’te response headers önceden decoded; stream suffix data henüz receiver’a ulaşmadı.

    HTTP/3 client
    0/4 content pending
    Atlas HTTP/3 server
    DATA0/4 prepared
    Client QUIC receiver
    No suffix fragments
    Client QPACK context
    Headers decoded
  2. Stream 0 tail ulaştı

    Stream 0 suffix’inin yerel offset 2’den başlayan tail bytes’ı client QUIC receiver buffer’ına ulaştı. İlk iki byte eksik olduğu için ordered prefix hâlâ sıfırdır; bu offset tam QUIC stream’ine ait değildir.

    HTTP/3 client
    0/4 content pending
    Atlas HTTP/3 server
    Tail0 delivered
    Client QUIC receiver
    0 tail buffered; prefix0
    Client QPACK context
    Headers decoded
  3. Ordered prefix bekler

    Receiver stream 0’ın local missing prefix’ini bekler; HTTP3 parser’a complete frame uydurulmaz.

    HTTP/3 client
    0/4 content pending
    Atlas HTTP/3 server
    DATA4 ready
    Client QUIC receiver
    0 unusable; 4 independent
    Client QPACK context
    Headers decoded
  4. Stream 4 suffix ulaştı

    Bağımsız stream 4’ün altı byte’lık DATA suffix’i receiver’a tam ulaşır. Stream 0’daki gap, stream 4’ü bekletmez.

    HTTP/3 client
    0/4 content pending
    Atlas HTTP/3 server
    DATA4 delivered
    Client QUIC receiver
    4 usable6; 0 prefix0
    Client QPACK context
    Headers decoded
  5. Stream 4 yorumlandı

    Local parser Type0/Length4’ü çözer; decoded fields ve supplied clean end ile Çay response’u complete olur.

    HTTP/3 client
    4 complete: Çay; 0 pending
    Atlas HTTP/3 server
    DATA4 alındı; prefix0 hazır
    Client QUIC receiver
    4 consumed; 0 prefix0
    Client QPACK context
    Headers decoded
  6. Stream 0 prefix ulaştı

    Stream 0 için missing iki framing byte’ı receiver’a ulaşır; tail aynı buffer’da beklemektedir.

    HTTP/3 client
    4 complete; 0 pending
    Atlas HTTP/3 server
    Prefix0 delivered
    Client QUIC receiver
    0 usable12; gap filled
    Client QPACK context
    Headers decoded
  7. Local assembly

    Receiver suffix’i kendi stream’inde ordered birleştirir; bu işlem yeni bir network packet veya field decode değildir.

    HTTP/3 client
    4 complete; 0 pending
    Atlas HTTP/3 server
    All suffix fragments delivered
    Client QUIC receiver
    0 complete DATA suffix
    Client QPACK context
    Headers decoded
  8. Stream 0 yorumlandı

    HTTP/3 parser on content byte’ını Atlas note olarak yorumlar. Önceden decoded headers ve verilmiş clean stream ending ile stream 0 da tamamlanır; completion sırası önce 4, sonra 0’dır.

    HTTP/3 client
    0 complete: Atlas note; 4 complete
    Atlas HTTP/3 server
    Delivery finished
    Client QUIC receiver
    Suffixes consumed
    Client QPACK context
    Headers decoded

QPACK dependency

  1. Insert count sıfır

    Decoder Insert Count=0 ve izin verilen blocked streams=1 olarak verilmiştir. Stream 0 field section’ı Required Insert Count=1 isteyecektir.

    HTTP/3 client
    No fields received
    Atlas HTTP/3 server
    RIC1 section, RIC0 section ve insertion hazır
    Client QUIC receiver
    QUIC context established
    Client QPACK context
    Insert Count0
  2. Encoded fields ulaştı

    Request stream0’ın encoded response section’ı client’a ulaştı; current Insert Count0 yeterli değildir.

    HTTP/3 client
    0 received; fields unusable
    Atlas HTTP/3 server
    RIC1 delivered
    Client QUIC receiver
    Section0 bytes delivered
    Client QPACK context
    Insert Count0
  3. Dependency blocked

    Required Insert Count=1, decoder count=0’dan büyük olduğu için section 0 blocked kalır. Byte’ların ulaşması metadata’nın kullanılabilir olduğunu göstermez.

    HTTP/3 client
    0 fields blocked
    Atlas HTTP/3 server
    Section4 RIC0 ve insertion hazır
    Client QUIC receiver
    Streams independent
    Client QPACK context
    RIC1 > Count0
  4. Independent fields

    Dynamic reference olmayan section4 RIC0 ile ulaşır; onun prerequisite’i count0 tarafından sağlanır.

    HTTP/3 client
    4 fields usable; 0 blocked
    Atlas HTTP/3 server
    Section4 alındı; insertion hazır
    Client QUIC receiver
    Section4 bytes delivered
    Client QPACK context
    Count0; RIC0 satisfied
  5. Encoder instruction

    Ayrı encoder stream’e ait insertion instruction client QPACK context’ine ulaşır; decoder Insert Count hâlâ 0’dır. Burada instruction’ın mantıksal anlamı gösterilir; encoded QPACK bytes verilmemiştir.

    HTTP/3 client
    4 usable; 0 blocked
    Atlas HTTP/3 server
    Insertion delivered
    Client QUIC receiver
    Encoder stream delivered
    Client QPACK context
    Instruction pending; Count0
  6. Insertion işlendi

    Geçerli olduğu verilen instruction, local olarak x-course: atlas entry’sini ekler. Decoder Insert Count artık 1 olur.

    HTTP/3 client
    4 usable; 0 ready to decode
    Atlas HTTP/3 server
    Insertion delivered
    Client QUIC receiver
    No new network event
    Client QPACK context
    Insert Count1
  7. Fields kullanılabilir

    Required Insert Count=1, Insert Count=1 ile karşılanır. Geçerli olduğu verilen section 0 decoded metadata’ya dönüşür; dynamic reference feedback bu sahnede gösterilmez.

    HTTP/3 client
    0/4 fields usable; bodies omitted
    Atlas HTTP/3 server
    No body delivery claim
    Client QUIC receiver
    No new network event
    Client QPACK context
    Count1; feedback required

ROLLER · STATE · VERİ AKIŞI

QUIC transport, HTTP/3 application mapping

HTTP/3 ortak HTTP semantics’ini QUIC üzerine map eder. QUIC UDP tabanlı secure connection transport’tur; HTTP/3 yalnız “HTTP/2 header’larını UDP datagram’a koymak” değildir. Handshake, reliable stream delivery, flow control ve packet protection transport katmanında ele alınır; application method/status/media anlamını HTTP belirler.

Connection establishment QUIC v1 için TLS 1.3 veya üstü handshake ve HTTP/3 için h3 application protocol negotiation içerir. Authority/certificate doğrulaması ve application authorization ayrı kararlar olarak kalır. Discovery/UDP connectivity başarısızsa TCP-based HTTP versions’a fallback mümkün olabilir; bir origin’in h3 availability bildirmesi her request’in gerçekten HTTP/3 kullandığını kanıtlamaz.

Sahneler kurulmuş QUIC connection, tamamlanmış HTTP/3 control stream SETTINGS ve kullanılabilir flow credit ile başlar. QUIC handshake veya UDP traffic çalıştırılmaz. Stream suffix byte’ları ve QPACK ön koşulları örneğin verileridir; TLS validation veya gerçek endpoint reachability sonucu değildir.

Request streams ve per-stream delivery

HTTP/3 client-initiated bidirectional streams request ve response taşır: ilk stream 0, sonraki 4 ve 8’dir. HTTP/2’de 0 connection control iken burada request stream olabilir. Control/QPACK encoder/decoder gibi işlevler ayrı unidirectional streams kullanır; iki protocol’ün stream-number anlamları körü körüne taşınmaz.

QUIC bir stream içindeki bytes’ı ordered sunar, farklı streams arasında genel ordering garantisi vermez. Normal branch stream 0 için illustrated DATA suffix’in tail bytes’ını alır ama başındaki iki framing byte gelmemiştir. Receiver o stream’in usable prefix’ini bekler. Stream 4’ün bağımsız complete DATA suffix’i geldiğinde kendi decoded-header context’iyle Çay’ı verebilir.

Bu, bütün blocking’in bitmesi demek değildir. Aynı stream’deki gap ordered delivery’yi bekletir; bir packet birden fazla stream’in data’sını taşırsa kaybı o streams’i birlikte etkileyebilir. Connection congestion ve flow limits de ortaktır. Örnekte suffix offsets yerel fragment koordinatıdır; gerçek QUIC STREAM frame absolute offsets veya packet capture fields değildir.

HTTP/3 frame, QUIC packet veya STREAM frame değildir

HTTP/3 frame Type ve Length’i QUIC variable-length integer encoding ile yazar, ardından payload gelir. Stream ID frame header’da yoktur çünkü bytes zaten QUIC stream’indedir. HTTP/2’nin sabit 9-byte frame header ve END_STREAM flag’ini burada arama; HTTP/3 message completion underlying stream ending ile ilişkilidir.

Artifact Çay için isolated DATA fragment’i 00 04 c3 87 61 79 olarak verir: Type=0, payloadLength=4 ve dört content byte. Toplam HTTP/3 frame fragment’i 6 byte’tır. Bu hex UDP/IP/QUIC packet overhead’i, packet protection veya önceki HEADERS bytes’ını içermez. Length bütün network transfer size değildir.

QUIC STREAM frames stream data’yı packet’lara taşır; HTTP/3 frames o data’nın içindeki application framing’idir. Bir HTTP/3 frame packet sınırını aşabilir ve transport retransmission farklı fragmentation kullanabilir. Body content tamam olsa bile HTTP response completion için frame sequence, decoded fields ve temiz stream ending context’i gerekir.

QPACK bağımsız streams’e field dependencies ekler

HPACK field blocks’un sıralı context update’ine dayanır. QUIC farklı streams’i bağımsız getirebildiği için HTTP/3 QPACK kullanır: encoder stream table instructions taşır, encoded field sections o state’e referans verir. Encoder/decoder feedback ayrı unidirectional streams’dedir; bir HTTP HEADERS frame table insertion’ın wire’da önce alınmasını kendiliğinden garanti etmez.

Fixture request stream 0’da gelen encoded response field section Required Insert Count=1 ister; decoder Insert Count=0’dır. Bytes alınmıştır ama fields henüz decoded değildir. Stream 4 için dynamic reference olmayan field section Required Insert Count=0 ile decode olabilir. “HEADERS received” ile “HTTP fields usable” aynı observation değildir.

Encoder insertion instruction ulaşınca decoder local olarak Insert Count’u 1 yapar; stream 0 dependency’si çözülür. Count’un yeterli olması yalnız bir ön koşuldur; field section’ın syntax ve reference doğrulamasını kaldırmaz. Burada tam QPACK codec yoktur ve encoded fields’ın geçerli olduğu verilmiştir. Gerçek implementation, blocked-stream/table limits ile acknowledgment ve eviction kurallarını korur. Düşük gecikme hedefi bütün compression beklemelerini yok etmez.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Stream prefix

  1. Tail bytes usable prefix sayılmadı

    Stream 0’ın DATA suffix tail’i offsetWithinSuffix 2’de gelir; usableSuffixOctetsAfter 0’dır. Offset, çizilen suffix’e göredir; gerçek absolute QUIC STREAM offset’i değildir.

    Dependency record
    Stream0 tail present / usable prefix 0
    Progress gate
    Gate bekliyor
    Application boundary
    Hüküm yok
  2. Progress gate kendi stream’inde prefix istedi

    Type ve Length prefix’i olmadan bu suffix complete frame olarak yorumlanmaz. Tail’in alınması application content’inin kabulü değildir. Buffered bytes ile usable ordered bytes ayrı state’lerdir.

    Dependency record
    Stream0 tail present / usable prefix 0
    Progress gate
    Stream0 waits for its own prefix
    Application boundary
    Hüküm yok
  3. Başka stream’in ilerlemesi mümkün kaldı

    Stream 4’ün altı byte’lık suffix’i offset 0’dan tamamlanır. Önceki decoded headers ve clean ending verilmiştir. Bu koşullarda Çay complete olur; stream 0’ın gap’i bütün streams için aynı ordered-byte wait’i yaratmaz.

    Dependency record
    Stream0 tail present / usable prefix 0
    Progress gate
    Stream0 waits for its own prefix
    Application boundary
    Stream4 complete / stream0 pending
  4. Prefix daha sonra kendi boşluğunu kapattı

    Stream 0 için offset 0’da 000a prefix’i sağlanınca usable suffix 12 byte olur. Type 0 ve payloadLength 10, Atlas note content’ini tanımlar. Bu bytes HTTP/3 DATA suffix’idir; QUIC packet header veya encryption bytes değildir.

    Dependency record
    Stream0 usable suffix 12 / payload 10
    Progress gate
    Prefix tamam; yerel yorumlama bekliyor
    Application boundary
    Stream4 complete / stream0 pending
  5. Independent delivery diğer limits’i kaldırmadı

    Prefix tamamlanması bu frame’i yorumlanabilir yapar. Shared congestion, connection credit, decoded field limits veya QPACK dependency bundan bağımsızdır. HTTP/3 için her durumda zero head-of-line blocking vaadi verilmez.

    Dependency record
    Stream0 usable suffix 12 / payload 10
    Progress gate
    Prefix complete / other prerequisites separate
    Application boundary
    Stream4 complete / stream0 pending
  6. Secure transport permission sayılmadı

    Fixture QUIC establishment ve HTTP/3 settings’i verilmiş kabul eder. Bu koşullar user, tenant veya resource grant’i üretmez. Bu iki public content’in completion sırası 4,0’dır; gerçek network recovery veya authorization ölçülmez.

    Dependency record
    Stream0 usable suffix 12 / payload 10
    Progress gate
    Prefix complete / other prerequisites separate
    Application boundary
    Completion 4,0 / application policy separate

QPACK gate

  1. Required ve current insert counts ayrıldı

    Stream 0 field section’ı requiredInsertCount 1 ister; decoder initialInsertCount 0’dır. Stream 4 requiredInsertCount 0 ile dynamic reference istemez. Bu logical prerequisites geçerli syntax/reference checking sonrasında verilmiştir.

    Dependency record
    Stream0 requires 1 / current 0
    Progress gate
    Gate bekliyor
    Application boundary
    Hüküm yok
  2. Count sağlanmadan fields usable olmadı

    1 > 0 olduğu için stream 0 initialFieldsUsable false kalır. Stream 4 için 0 <= 0 sağlanır. DATA bytes hazır olsa bile gerekli field dependency çözülmeden response metadata usable sayılamaz.

    Dependency record
    Stream0 requires 1 / current 0
    Progress gate
    Stream0 blocked / stream4 fields usable
    Application boundary
    Hüküm yok
  3. Wait bounded resource koşuluyla açıklandı

    permittedBlockedStreamsSupplied 1 ve configured capacity verilmiştir. Bu wait malicious event değildir; pending work sınırlanmalıdır. Count check tam QPACK decoder değildir ve invalid syntax’ı kabul ettirmez.

    Dependency record
    Stream0 requires 1 / current 0
    Progress gate
    Stream0 blocked / stream4 fields usable
    Application boundary
    Bounded wait / syntax validity separate
  4. Instruction bytes ile processing ayrıldı

    Encoder instruction x-course: atlas insertion’ını logical projection olarak sağlar. Byte encoding gösterilmez. Bir instruction’ın alınması ile decoder’ın onu işlemesi farklı aşamalardır; current count yalnız processing sonrasında artar.

    Dependency record
    Insertion supplied / encoding omitted
    Progress gate
    Stream0 blocked / stream4 fields usable
    Application boundary
    Bounded wait / syntax validity separate
  5. Processing prerequisite’i sağladı

    afterProcessingInsertCount 1 olur ve verilmiş stream 0 field section’ı usable olabilir. Dynamic reference absolute index 0’dır. decoderFeedbackRequired true kalır; bütün feedback exchange’i yapılmış gibi gösterilmez.

    Dependency record
    Insertion supplied / encoding omitted
    Progress gate
    Count 1 / fields usable / feedback required
    Application boundary
    Bounded wait / syntax validity separate
  6. Dependency sonucu gerçek codec claim’i olmadı

    Count 1, bu geçerli verilmiş dependency’yi çözer. Header size limits ve application authorization ayrı koşullardır. Network QUIC, TLS, recovery veya QPACK codec çalıştırılmadığından sonuç conceptual prerequisite hesabıdır.

    Dependency record
    Insertion supplied / encoding omitted
    Progress gate
    Count 1 / fields usable / feedback required
    Application boundary
    Prerequisite met / codec and authz unmeasured

VARSAYIM · SINIR · KONTROL

Security transport’i HTTP permission yerine koyma

QUIC connection security peer ve packet protection context’i sağlar; GET’in hangi tenant resource’una izinli olduğunu kendi başına belirlemez. Hata koşulu established secure connection veya valid stream’i application subject permission yerine kullanmaktır. Etki protected content’in yanlış bağlama sunulması olabilir.

Request stream 0/4 bir protocol correlation’dır. Duru’nun identity/tenant/resource kararları trusted application context’inde ayrı oluşur. Protocol fallback varsa aynı authorization policy version’lar arasında korunmalıdır; HTTP/3 availability access-control upgrade iddiası değildir.

Savunma maintained transport stack, certificate/authority validation ve her exchange için application authorization boundary’sidir. Buradaki reserved Atlas origin ve supplied establishment yalnız teaching context oluşturur; gerçek TLS peer, cryptographic proof veya tenant-isolation sonucu üretmez.

Independent delivery sınırsız buffering değildir

Stream tail bytes prefix gelene kadar buffer’da kalabilir; QPACK field section insertion gelene kadar unusable kalabilir. Bunlar farklı dependency’lerdir fakat ikisi de memory/work tutar. Her wait malicious değildir: loss, reordering, server scheduling veya ordinary backpressure olabilir.

Control boundaries stream/connection flow limits, decoded fields size, table capacity ve permitted blocked streams’i içerir. QPACK encoder instructions için gerekli progress’i, aynı bağımlılıktaki blocked content’in tüketilmesine bağlamak deadlock riski oluşturabilir; resource design bu cycle’ı önlemelidir.

Savunma supported codec/transport limits, bounded pending work ve ayrı wait reasons’tır. Prerequisite count sağlandı diye malformed field section kabul edilmez; count check tam decoder değildir. Sahne valid supplied inputs üzerinde causal dependency gösterir, stress veya resource-exhaustion reproduction yapmaz.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Suffix ledger

  1. Frame overhead payload’dan ayrıldı

    Stream 4 frameHex 0004c3876179, Type 0 ve Length 4 taşır. Content 4, isolated frame 6 byte’tır. Bunlar UDP veya QUIC packet boyutu değildir; packet protection fields bu artifact’te yoktur.

    Suffix/field ledger
    Stream4: content 4 / frame 6
    Evidence comparison
    Gate bekliyor
    Coverage verdict
    Hüküm yok
  2. Stream 0 received ve usable counts karşılaştırıldı

    Stream 0’da tail alınmışken usable prefix 0 kalır. Offset 0 prefix’i geldikten sonra usable 12 olur. Review, out-of-order received bytes ile HTTP parser’a verilebilen ordered bytes’ı ayırır.

    Suffix/field ledger
    Stream4: content 4 / frame 6
    Evidence comparison
    Stream0 usable 0→12 after prefix
    Coverage verdict
    Hüküm yok
  3. Aynı event array iki farklı stream state’i içerdi

    Arrival array’inde stream 4 complete olurken stream 0 pending olabilir. Global event index, global message completion değildir. Stream 0 body Atlas note ve stream 4 body Çay olarak ayrı birleştirilir.

    Suffix/field ledger
    Stream4 complete before stream0
    Evidence comparison
    Stream0 usable 0→12 after prefix
    Coverage verdict
    Hüküm yok
  4. Completion için omitted context açık tutuldu

    Önceki response headers decoded, enough flow credit ve clean response stream end verilmiştir. DATA suffix bytes tek başına bu koşulları kanıtlamaz. Comparison, artifact’in supplies ettiği context’i capture gibi sunmaz.

    Suffix/field ledger
    Stream4 complete before stream0
    Evidence comparison
    Headers/credit/end supplied, not measured
    Coverage verdict
    Hüküm yok
  5. Local byte result runtime ölçümü olmadı

    Suffix reconstruction geçerli isolated DATA bytes için incelenebilir. Gerçek UDP/QUIC capture, TLS veya recovery ölçümü yoktur. Completion 4,0, yalnız verilmiş context altında authored model sonucudur.

    Suffix/field ledger
    Stream4 complete before stream0
    Evidence comparison
    Headers/credit/end supplied, not measured
    Coverage verdict
    Local suffix consistent / network unmeasured
  6. Regression coordinate scope’u korudu

    offsetWithinSuffix, local teaching coordinate olarak tutulur; absolute STREAM Offset field’ı diye dış kayda taşınmaz. Frame type, payload length, usable prefix ve ending context farklı alanlar olarak tekrar kontrol edilir.

    Suffix/field ledger
    Stream4 complete before stream0
    Evidence comparison
    Headers/credit/end supplied, not measured
    Coverage verdict
    Recheck suffix coordinates and prerequisites

Count coverage

  1. QPACK predicate kayıtları aynı scope’ta seçildi

    Normal XML stream 0 için required 1/current 0/usable false, sonra 1/1/true verir. Stream 4 için 0/0/true’dur. Logical count bilgisi encoded QPACK bytes veya gerçek decoder trace’i değildir.

    Suffix/field ledger
    Normal: 1/0 false; 0/0 true; 1/1 true
    Evidence comparison
    Gate bekliyor
    Coverage verdict
    Hüküm yok
  2. Normal oracle sonucu prerequisite ile eşleşti

    fieldsUsable true iken requiredInsertCount current count’tan büyük olan satır aranır. Normal rows count sıfır verir. Bu predicate valid verilmiş sections içindir; syntax/reference validity ayrı varsayımdır.

    Suffix/field ledger
    Normal: 1/0 false; 0/0 true; 1/1 true
    Evidence comparison
    Normal predicate violations 0
    Coverage verdict
    Hüküm yok
  3. Positive control erken usability iddiasını seçti

    Positive XML required 1/current 0/fieldsUsable true bildirir; oracle bir match üretir. Bu bilinçli inconsistent observation kontrolüdür. Gerçek QPACK implementation failure veya network exploit kaydı değildir.

    Suffix/field ledger
    Positive: 1/0 true / match 1
    Evidence comparison
    Normal predicate violations 0
    Coverage verdict
    Hüküm yok
  4. Missing count tam fixture ile doldurulmadı

    Alternatif review’de decoder current count observation’ı bulunmaz. Normal fixture’ın count 1 değeri bu boşluğu kapatmaz. Zero matches, prerequisite sağlandı hükmünü coverage bilinmeden desteklemez.

    Suffix/field ledger
    Positive: 1/0 true / match 1
    Evidence comparison
    Current-count observation missing
    Coverage verdict
    Hüküm yok
  5. Usability verdict unknown kaldı

    Bu review’de fields usability UNKNOWN kalır. DecoderFeedbackRequired flag’i feedback’in gerçekten işlendiğini kanıtlamaz. Count coverage, section validity ve feedback completion farklı evidence sorularıdır.

    Suffix/field ledger
    Positive: 1/0 true / match 1
    Evidence comparison
    Current-count observation missing
    Coverage verdict
    UNKNOWN: decoder-count coverage
  6. Yeni evidence hedefi secret toplamadan belirlendi

    Decoder’ın aynı connection ve section için Required Insert Count, işlenmiş Insert Count ve fields usability kaydı gerekir. Encoder’ın “insertion hazır” kaydı decoder processing kanıtı değildir. Dynamic-reference feedback başka bir kayıttır; bu count hesabı onu tamamlanmış göstermez.

    Suffix/field ledger
    Positive: 1/0 true / match 1
    Evidence comparison
    Current-count observation missing
    Coverage verdict
    Needed: count, section and processing scope

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Üç boundary’yi ayrı işaretle

Manual exercise’de QUIC packet delivery, ordered stream data ve HTTP/3 frame interpretation’ı ayrı satırlara ayır. Artifact offset’leri illustrated suffix’e göredir; bunları gerçek STREAM Offset field’ı diye log veya capture’a taşımama. Stream 0 tail alınmış olsa da usable prefix sıfır olabilir.

Stream 4’ün altı-byte DATA suffix’ini Type/Length/payload olarak çöz: content dört byte, frame altı byte. Önceki decoded headers ve supplied clean ending ile Çay response’u complete olur. Aynı global event array’de stream 0 için pending ve stream 4 için complete state’leri yan yana durabilir.

Byte check stream suffix’i birleştiren local fixture’ı doğrular; UDP/QUIC packet capture yapmaz. Diagnostic scope’ta connection alias, stream ID, usable prefix, pending dependency ve completion context yeterli olabilir. Secret field values veya not body’leri bütün kayıtlara kopyalanmaz.

QPACK arrival’ı decode ile karıştırma

Dependency branch’te Required Insert Count ve current Insert Count’u kaydet. İlk durumda 1>0 olduğu için stream 0 blocked’tur; independent stream 4 için 0<=0 prerequisite sağlanır. Encoder instruction arrival önce yalnız bytes alınmasını bildirir; local processing current count’u artırır.

Local count=1 olduğunda stream 0’ın supplied field section’ı decode edilip usable metadata’ya dönüşür; ardından gerçek codec feedback/retention kuralları ayrı devam eder. Artifact decoderFeedbackRequired alanı bunu hatırlatır ama bütün feedback exchange’ini çalışmış gibi çizmez.

XPath count predicate sağlanmadığı halde fieldsUsable=true iddiasını seçer: normal 0, inconsistent positive 1. Missing event de 0 olabilir ve güvenlik sonucu değildir. Gerçek HTTP/3 için protocol-negotiation evidence, source capture ve maintained QPACK runtime gerekir; bu bounded model onları tamamlanmış saymaz.

HTTP/3 configuration’da dynamic table kapasitesi ile izin verilen blocked stream sayısını ayrı decoder bütçeleri olarak seç. Maintained QPACK implementation bu ilan edilen sınırları uygulamalı; unresolved field section’ı hazır metadata diye application’a vermemelidir. Artifact’in tek blocked stream izni production önerisi değildir. Normal stream 4 ilerlerken stream 0’ın count 0’da beklemesi, sonra insertion işlendiğinde count 1 ile kullanılabilir hale gelmesi, aynı configuration altında doğrulanacak ayrı sonuçlardır.

ŞİMDİ VAKAYA UYGULA

QUIC stream prefix’i ile QPACK insertion hangi farklı dependency’leri kurar?

Stream 0’ın DATA tail’i prefix’ini beklerken stream 4 Çay response’unu tamamlayabilir. Başka case’te stream 0’ın field section’ı insert count 1 ister; current count 0 iken usable değildir. Bu iki wait farklı boundary’lere aittir.

Vakadaki response başka bir HTTP transport üzerinde gelseydi hangi application koşulları yine gerekli olurdu? Stream veya packet completion’ını başarılı note parsing’le eşitleme.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

QUIC suffix ve QPACK prerequisites

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "connection": {
    "quicEstablishedSupplied": true,
    "http3SettingsSupplied": true,
    "protocol": "h3",
    "runtime": "authored fixture only"
  },
  "requestStreamIds": [
    0,
    4
  ],
  "streamSuffixes": {
    "scope": "Offsets start at0 within the illustrated DATA suffix, not absolute QUIC stream offsets. Preceding HTTP3 response headers decoded and omitted; clean end and enough flow credit supplied.",
    "frames": {
      "0": {
        "type": 0,
        "payloadLength": 10,
        "content": "Atlas note",
        "payloadHex": "41746c6173206e6f7465",
        "frameHex": "000a41746c6173206e6f7465",
        "frameOctets": 12
      },
      "4": {
        "type": 0,
        "payloadLength": 4,
        "content": "Çay",
        "payloadHex": "c3876179",
        "frameHex": "0004c3876179",
        "frameOctets": 6
      }
    },
    "arrivals": [
      {
        "streamId": 0,
        "offsetWithinSuffix": 2,
        "hex": "41746c6173206e6f7465",
        "usableSuffixOctetsAfter": 0
      },
      {
        "streamId": 4,
        "offsetWithinSuffix": 0,
        "hex": "0004c3876179",
        "usableSuffixOctetsAfter": 6
      },
      {
        "streamId": 0,
        "offsetWithinSuffix": 0,
        "hex": "000a",
        "usableSuffixOctetsAfter": 12
      }
    ],
    "httpCompletionOrder": [
      4,
      0
    ],
    "cleanResponseStreamEndSupplied": true
  },
  "qpack": {
    "scope": "Decoded logical QPACK prerequisites supplied after valid syntax/reference checking; not encoded QPACK bytes or full decoder execution.",
    "dynamicCapacityConfiguredSupplied": true,
    "permittedBlockedStreamsSupplied": 1,
    "initialInsertCount": 0,
    "fieldSections": [
      {
        "requestStreamId": 0,
        "requiredInsertCount": 1,
        "referencedDynamicAbsoluteIndices": [
          0
        ],
        "initialFieldsUsable": false,
        "afterInsertFieldsUsable": true,
        "decoderFeedbackRequired": true
      },
      {
        "requestStreamId": 4,
        "requiredInsertCount": 0,
        "referencedDynamicAbsoluteIndices": [],
        "initialFieldsUsable": true,
        "decoderFeedbackRequired": false
      }
    ],
    "encoderInstruction": {
      "kind": "supplied valid insertion",
      "name": "x-course",
      "value": "atlas",
      "resultInsertCount": 1,
      "scope": "Encoder instruction logical projection; byte encoding deliberately omitted."
    },
    "afterProcessingInsertCount": 1
  },
  "selector": {
    "language": "XPath",
    "xml": "<observations><fields stream=\"0\" requiredInsertCount=\"1\" insertCount=\"0\" fieldsUsable=\"false\"/><fields stream=\"4\" requiredInsertCount=\"0\" insertCount=\"0\" fieldsUsable=\"true\"/><fields stream=\"0\" requiredInsertCount=\"1\" insertCount=\"1\" fieldsUsable=\"true\"/></observations>",
    "xpath": "count(/observations/fields[@fieldsUsable=\"true\" and number(@requiredInsertCount)>number(@insertCount)])",
    "expected": 0,
    "positiveFixtureXml": "<observations><fields stream=\"0\" requiredInsertCount=\"1\" insertCount=\"0\" fieldsUsable=\"true\"/></observations>",
    "positiveExpected": 1,
    "scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
    "missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
  }
}
streamSuffixes.frames
HTTP/3 DATA fragments; QUIC packet/encryption headers yoktur.
offsetWithinSuffix
Yerel teaching coordinate; gerçek QUIC absolute STREAM offset değildir.
requiredInsertCount / insertCount
Dynamic reference prerequisite ile decoder’ın current insert count’u.
decoderFeedbackRequired
Dynamic reference decode sonrasında feedback gereksinimi; exchange kapsam dışında.

Valid isolated DATA bytes local olarak çözülebilir. HTTP/3/QUIC network, TLS, recovery veya QPACK codec çalıştırılmaz. Encoded fields validity, settings/flow ve clean ending supplied teaching assumptions’dır.

İki yanlış kanı

HTTP/3’te packet loss veya compression hiçbir stream’i bekletmez.

Independent QUIC streams başka stream’in gap’i sırasında ilerleyebilir; aynı-stream gap, shared limits ve QPACK insertion dependencies yine bekletir.

HTTP/3 DATA frame’inde HTTP/2 gibi stream ID ve END_STREAM vardır.

HTTP/3 Type/Length/payload taşır; stream QUIC context’inden gelir, ending transport stream’e aittir. Çay frame’i burada 6 byte, content’i 4 byte’tır.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Stream 0 DATA suffix başlangıcı eksik; stream 4 suffix tam. Clean-end koşulunda hangi response önce tamamlanır?

  1. Stream 4. Stream 0 kendi gap’ini bekler.
  2. Hiçbiri. Bütün QUIC stream’leri tek connection byte gap’ini bekler.
Gerekçeli cevabı oku

Stream 4. Stream 0 kendi gap’ini bekler. — httpCompletionOrder=[4, 0]. QUIC farklı stream’ler arasında byte ordering zorlamaz.

Insert count=0 iken RequiredInsertCount=1 olan field’lar kullanılabilir mi?

Dersten seçilen artifact alanları; öğretim örneği

qpack.initialInsertCount
0
qpack.fieldSections[0]
{"requestStreamId":0,"requiredInsertCount":1,"referencedDynamicAbsoluteIndices":[0],"initialFieldsUsable":false,"afterInsertFieldsUsable":true,"decoderFeedbackRequired":true}
qpack.fieldSections[1]
{"requestStreamId":4,"requiredInsertCount":0,"referencedDynamicAbsoluteIndices":[],"initialFieldsUsable":true,"decoderFeedbackRequired":false}
  1. Evet. QUIC loss isolation bütün QPACK dependency’lerini kaldırır.
  2. Hayır. Gerekli insertion işlenene kadar field’lar blocked.
Gerekçeli cevabı oku

Hayır. Gerekli insertion işlenene kadar field’lar blocked. — Stream 0 dynamic dependency=1 ister. Stream 4 requiredInsertCount=0 olduğu için bu dependency’yi beklemez.

offsetWithinSuffix=0 neden tam QUIC stream’in absolute offset=0 değeri gibi kullanılamaz?

Gerekçeli cevabı oku

Örnek yalnız DATA suffix’ini gösterir. Önceki HTTP/3 headers’ın decode edildiği girdi olarak verilmiştir, fakat çizilmez. Offset bu suffix’e göredir. QPACK dependency’leri logical olarak temsil edilir; encoded byte değildir. Buradan gerçek packet, decoder veya browser response ölçümü çıkarılamaz.

□ Suffix’e göre offset ile absolute offset’i ayırdım.

□ Logical QPACK verisini gerçek decoder çalışması saymadım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam

  • RFC 9114 — HTTP/32 HTTP/3 Protocol Overview · 3.1 Discovering an HTTP/3 Endpoint · 3.2 Connection Establishment · 4.1 HTTP Message Framing · 4.2.1 Field Compression · 6.1 Bidirectional Streams · 6.2 Unidirectional Streams · 7.1 Frame Layout · 7.2.1 DATA
  • RFC 9000 — QUIC2 Streams · 2.1 Stream Types and Identifiers · 2.2 Sending and Receiving Data · 4 Flow Control · 4.1 Data Flow Control · 13 Packetization and Reliability · 16 Variable-Length Integer Encoding
  • RFC 9204 — QPACK2.1.2 Blocked Streams · 2.1.3 Avoiding Flow-Control Deadlocks · 2.2.1 Blocked Decoding · 2.2.2.1 Completed Processing of a Field Section · 3.1 Static Table · 3.2 Dynamic Table · 5 Configuration · 7.3 Memory Consumption