Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-10.04

Resource, script ve request loading

Download, execution ve application sonucu farklı anlarda oluşur. Parser’ın kaynak keşfi, script scheduling ve Fetch/XHR completion’ı somut bir loading defteriyle ayır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

defer A→B

  1. A/B keşfedildi

    Document parser A/B script’lerini defer ile keşfetmiştir; fetch başlatılması ve request’lerin origin’e ulaşması bu başlangıçta verilidir. Seçilen kesit B/A response arrival’ını izler; henüz hiçbir script evaluate edilmedi.

    Document / Duru
    A/B declared; parser running
    Resource loader
    A/B fetch initiated
    Origin / Atlas
    A/B requests supplied arrived
    Execution / API state
    Executed=[]
  2. B resource ulaştı

    Bu senaryoda B response’u loader’a önce ulaşır; parser henüz tamamlanmamıştır.

    Document / Duru
    Parser running
    Resource loader
    B ready; A pending
    Origin / Atlas
    B200 complete; A pending
    Execution / API state
    Executed=[]
  3. B execution kararı

    defer B A/parsing’i bekler; async branch B’yi hazır olduğunda execute eder.

    Document / Duru
    Parser running
    Resource loader
    B ready; A pending
    Origin / Atlas
    A response pending
    Execution / API state
    Executed=[]
  4. Parsing tamamlandı

    Document parsing tamamlanır; A henüz pending olduğundan defer execution kuyruğu yine bekler.

    Document / Duru
    Parser complete
    Resource loader
    B ready; A pending
    Origin / Atlas
    A response pending
    Execution / API state
    Executed=[]
  5. A resource ulaştı

    A response loader’a şimdi ulaşır; resource-ready order B/A olarak tamamlanmıştır.

    Document / Duru
    Parser complete
    Resource loader
    A/B ready
    Origin / Atlas
    A200/B200 complete
    Execution / API state
    Executed=[]
  6. Local evaluation

    defer ordered queue A sonra B evaluate eder; local execution yeni network response değildir.

    Document / Duru
    Parser complete
    Resource loader
    A/B ready
    Origin / Atlas
    Exchange complete
    Execution / API state
    Executed=[A,B]
  7. Event sınırını koru

    Duru execution sonucunu okur; image yüklemesi veya bütün application async işleri bu listede ölçülmez.

    Document / Duru
    DOM/execution observation complete
    Resource loader
    A/B ready
    Origin / Atlas
    Exchange complete
    Execution / API state
    Executed=[A,B]

async B→A

  1. A/B keşfedildi

    Document parser A/B script’lerini async ile keşfetmiştir; fetch başlatılması ve origin receipt başlangıçta verilidir. Response’ların B/A hazır olma sırası bu örneğin seçimidir; declaration sırası evaluation garantisi sağlamaz.

    Document / Duru
    A/B declared; parser running
    Resource loader
    A/B fetch initiated
    Origin / Atlas
    A/B requests supplied arrived
    Execution / API state
    Executed=[]
  2. B resource ulaştı

    Bu senaryoda B response’u loader’a önce ulaşır; parser henüz tamamlanmamıştır.

    Document / Duru
    Parser running
    Resource loader
    B ready; A pending
    Origin / Atlas
    B200 complete; A pending
    Execution / API state
    Executed=[]
  3. B execution kararı

    async branch B’yi hazır olduğunda execute eder; bu declaration order garantisi değildir.

    Document / Duru
    Parser running
    Resource loader
    B ready; A pending
    Origin / Atlas
    A response pending
    Execution / API state
    Executed=[B]
  4. Parsing tamamlandı

    Document parsing tamamlanır. B bu async dalında zaten çalışmıştır, A’nın response’u hâlâ beklenir. Bu adım defer kuyruğunu işletmez ve A’nın daha önce çalıştığını varsaymaz.

    Document / Duru
    Parser complete
    Resource loader
    B ready; A pending
    Origin / Atlas
    A response pending
    Execution / API state
    Executed=[B]
  5. A resource ulaştı

    A response loader’a şimdi ulaşır; resource-ready order B/A olarak tamamlanmıştır.

    Document / Duru
    Parser complete
    Resource loader
    A/B ready
    Origin / Atlas
    A200/B200 complete
    Execution / API state
    Executed=[B]
  6. Local evaluation

    Async A şimdi evaluate edilir. Bu senaryoda tamamlanmış execution sırası B/A’dır; başka hazır olma sıraları da mümkündür.

    Document / Duru
    Parser complete
    Resource loader
    A/B ready
    Origin / Atlas
    Exchange complete
    Execution / API state
    Executed=[B,A]
  7. Event sınırını koru

    Duru execution sonucunu okur; image yüklemesi veya bütün application async işleri bu listede ölçülmez.

    Document / Duru
    DOM/execution observation complete
    Resource loader
    A/B ready
    Origin / Atlas
    Exchange complete
    Execution / API state
    Executed=[B,A]

404 completion

  1. Fetch GET hazır

    Duru harmless missing note ister; başlangıçta Response ve consumed body yoktur.

    Document / Duru
    GET /notes/missing ready
    Resource loader
    Request pending
    Origin / Atlas
    No request yet
    Execution / API state
    Promise pending; body absent
  2. Request ulaştı

    GET origin’e ulaşır; public missing-resource outcome’u seçilmek üzere hazırdır.

    Document / Duru
    Waiting response
    Resource loader
    Request dispatched
    Origin / Atlas
    GET received; missing note
    Execution / API state
    Promise pending; body absent
  3. 404 hazır

    Origin 404 Not found content’i hazırlar; bu normal HTTP response network error değildir.

    Document / Duru
    Waiting response
    Resource loader
    Waiting headers
    Origin / Atlas
    404 ready; Not found
    Execution / API state
    Promise pending; body absent
  4. 404 headers ulaştı

    Loader status ve headers’i alır; Response exposed olabilir ama body consumption ayrı kalır.

    Document / Duru
    Response available
    Resource loader
    404 headers received
    Origin / Atlas
    404 body delivery pending
    Execution / API state
    Promise fulfilled; status404; ok=false
  5. Content tamamlandı

    Not found content loader’a ulaşır; ayrı body read operation’ı şimdi complete olabilir.

    Document / Duru
    Response available
    Resource loader
    404 body complete
    Origin / Atlas
    404 fully delivered
    Execution / API state
    Promise fulfilled; body read pending
  6. Local outcome kontrol

    Client text’i tüketir; status 404 olduğu için HTTP success false’dur. XHR load sonucu da ayrıca status kontrolü gerektirir.

    Document / Duru
    Show missing note outcome
    Resource loader
    404 body complete
    Origin / Atlas
    Exchange complete
    Execution / API state
    Body=Not found; accepted=false

Abort after headers

  1. Cancellable GET

    Duru public slow note GET’ini default AbortController signal ile başlatır.

    Document / Duru
    GET /notes/slow ready
    Resource loader
    Request pending
    Origin / Atlas
    No request yet
    Execution / API state
    Promise pending; body absent
  2. GET ulaştı

    Origin GET’i alır; bu arrival serverNeverProcessed iddiasını zaten sınırlar.

    Document / Duru
    Waiting response
    Resource loader
    Request dispatched
    Origin / Atlas
    GET received; benign read
    Execution / API state
    Promise pending; body absent
  3. 200 headers ulaştı

    200 status ve headers loader’a ulaşır; bu senaryoda body henüz tamamlanmamıştır.

    Document / Duru
    Response available
    Resource loader
    200 headers; body incomplete
    Origin / Atlas
    200 headers sent; body pending
    Execution / API state
    Promise fulfilled; body incomplete
  4. Local abort

    Duru abort() çağırır; bu model cancellation wire veya server rollback message’ı uydurmaz.

    Document / Duru
    Abort called
    Resource loader
    Client operation cancelled
    Origin / Atlas
    GET observed; rollback not proven
    Execution / API state
    Response exists; body unavailable
  5. Body read reject

    Incomplete body text() read’i default AbortError ile reject olur; fulfilled Response geri alınmaz.

    Document / Duru
    Abort outcome shown
    Resource loader
    Client operation cancelled
    Origin / Atlas
    GET observed; rollback not proven
    Execution / API state
    bodyRead=AbortError; server outcome bounded

ROLLER · STATE · VERİ AKIŞI

Resource keşfi execution değildir

Duru’nun Atlas sayfası HTML’den CSS, image ve script URL’leri keşfeder; JavaScript ayrıca Fetch veya XMLHttpRequest başlatabilir. Browser scheduling, cache lookup, network ve decode/execute farklı işlerdir. Bir URL’nin Network tablosunda görünmesi onun body’sinin tamamlandığını veya script’in çalıştığını söylemez. Preload/scanner erken keşif yapabildiğinden bütün request sırasını DOM parser’ın yürüdüğü sıra diye okumak da doğru değildir.

External parser-inserted classic script async/defer yoksa parsing’i fetch/evaluation tamamlanana kadar durdurur; browser’ın diğer her işinin durduğu anlamına gelmez. Inline classic script için external download yoktur. Bu ders normal JavaScript MIME type ve same-origin kaynakları seçer; stylesheet blocking, policy refusal ve dynamically inserted script’in force-async kuralları bu fixture’ın dışında kalır.

Download sırası ile execute sırası farklıdır

İki external classic script defer ile A sonra B yazılmış olsun. Fetch parsing ile paralel ilerleyebilir; B önce hazır olsa bile bu parser-inserted deferred pair A sonra B olarak, document parsing bittikten sonra execute edilir. DOMContentLoaded bu deferred execution’ın tamamlanmasını bekler. Bu event bütün image’lerin yüklenmesini veya application’ın bütün async işlerini bitirmesini garanti etmez.

async classic pair declaration order garantisi vermez; script hazır olduğunda execute edilebilir ve parser completion’dan önce çalışabilir. Artifact seçilmiş B-ready-before-A branch’ini gösterir; “async her zaman ters sıra çalışır” kuralı değildir. Birbirine bağımlı A/B’yi bu sıra garantisi olmayan contract’a bağlamak availability/state hatası yaratabilir.

type=module default olarak parsing sonrasına ertelenir ve static dependency graph’ını yükler; defer attribute module üzerinde ek etki yapmaz. async module graph hazır olduğunda daha erken evaluation seçebilir. Module evaluation, klasik global script ile aynı scope contract’ı değildir. Top-level await içeren graph’larda async evaluation completion ayrı nüans taşır; fixture await içermeyen küçük bir graph kullanır ve bütün async module işlerinin DOMContentLoaded öncesi bitmesini iddia etmez.

Response, body ve status ayrı kapılardır

Fetch Promise status ve headers kullanılabilir olduğunda Response ile fulfill olabilir; body henüz streaming olabilir. response.text()/json() ayrı async consumption’dır. Body disturbed/locked olduğunda tekrar kullanımı sınırlandırılır; ikinci kez aynı body’yi okumayı varsayma. json() parse failure da HTTP status failure’dan ayrıdır. GET fixture’ında request body yoktur; Fetch GET/HEAD için non-null request body kabul etmez.

404 gelmesi Fetch Promise’ını genellikle reject etmez; status 404 ve ok=false olan Response gelir. XHR load event’i de transfer completion yoludur; status ayrıca okunmalıdır ve 404 için load gelebilir. readyState DONE tek başına HTTP veya business success değildir. XHR error/abort ile Fetch rejection farklı API yüzeyleridir; hepsini tek success boolean’ına indirgeme.

AbortController yalnız client operation’ın cancellation sınırını anlatır. Headers sonrası abort edilmiş Fetch’in fulfill edilmiş Promise’ı geri alınmaz; body read AbortError ile reject olabilir. Request server’a ulaştıysa cancellation server’ın hiç işlem yapmadığını veya rollback’i kanıtlamaz. Native örnek benign GET’tir; action retry semantics WEB-07.02’de ayrı ele alınır.

Browser HTTP cache Request.cache ile ilgili seçime katılabilir. default normal eligibility/freshness kurallarını kullanır; no-cache uygun entry olsa da validation yolunu ister, no-store browser HTTP cache’e bakmadan network kullanır ve response’u bu cache’e yazmaz. Bu API seçimi bütün ara shared cache’leri veya Service Worker Cache API’yi temizleyen komut değildir. Ayrıntılı HTTP cache kuralları WEB-09.02–03 ile birlikte okunmalıdır.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Async dependency

  1. Declaration ve readiness iki ayrı sıra oldu

    Script declaration A,B iken readyOrder B,A’dır. Parser-inserted external classic context ve CSS blocking yokluğu verilmiştir. B downloaded olması A’nın gerekli state’i kurduğu anlamına gelmez.

    Resource/API record
    Declared A,B / ready B,A
    Dependency/completion gate
    Gate bekliyor
    Application state
    Outcome yok
  2. Async execution dependency’yi garanti etmedi

    Seçilmiş async execution B,A’dır; asyncOrderGuaranteed false’tur. A önce gerekli state’i kuruyorsa declaration order’a güvenmek yanlış acceptance koşuludur. Explicit dependency veya ordered execution gerekir.

    Resource/API record
    Declared A,B / ready B,A
    Dependency/completion gate
    Selected async B,A / order not guaranteed
    Application state
    Outcome yok
  3. Loaded label initialized state sayılmadı

    Resource-ready, script evaluated ve application state initialized farklı milestones’dır. Yanlış sıra undefined dependency veya yarım UI state doğurabilir. Bu harmless fixture yalnız names’i order ledger’a ekler; gerçek protected action çalıştırmaz.

    Resource/API record
    Declared A,B / ready B,A
    Dependency/completion gate
    Selected async B,A / order not guaranteed
    Application state
    Ready ≠ evaluated or application initialized
  4. Defer normal karşılaştırma branch’i oldu

    deferredExecution A,B olur ve DOMContentLoaded öncesidir. Defer burada parsing sonrası ordered execution sağlar. Bu loading contract authentication, schema veya server-side business gate’lerini çözmez.

    Resource/API record
    Defer A,B / before DOMContentLoaded
    Dependency/completion gate
    Selected async B,A / order not guaranteed
    Application state
    Ready ≠ evaluated or application initialized
  5. Module graph kendi qualification’ıyla seçildi

    main.mjs dependency helper.mjs taşır; defaultDeferred true, deferAttributeAddsEffect false’tur. Top-level await yokluğu verilmiştir. Bu seçilmiş graph’ın sırası bütün async module/TLA durumlarına genellenmez.

    Resource/API record
    Defer A,B / before DOMContentLoaded
    Dependency/completion gate
    Explicit helper.mjs→main.mjs / no TLA supplied
    Application state
    Ready ≠ evaluated or application initialized
  6. Control doğru dependency boundary’sinde kaldı

    Kontrol source yükleme ile gereken state’in initialization’ını açıkça ilişkilendirmektir. Exact latency veya bütün module graph davranışı ölçülmez. Ordered local evaluation sonucu broader business success diye sunulmaz.

    Resource/API record
    Defer A,B / before DOMContentLoaded
    Dependency/completion gate
    Explicit helper.mjs→main.mjs / no TLA supplied
    Application state
    Explicit initialization dependency required

HTTP/body gates

  1. 404 fulfilled Response olarak ayrı kaydedildi

    fetch404 fulfilled-response verir; status 404, ok false ve body Not found’dur. XHR load ve readyState 4 ile yine 404 verir. API completion label’ı HTTP success veya successful action değildir.

    Resource/API record
    Fetch fulfilled / XHR load / HTTP404
    Dependency/completion gate
    Gate bekliyor
    Application state
    Outcome yok
  2. Status gate successful action’ı withheld bıraktı

    acceptedAsHttpSuccess false’tur. Client, status range ve expected content contract’ını ayrı kontrol eder. Normal 404 rejection, attack attribution veya server never received sonucu değildir.

    Resource/API record
    Fetch fulfilled / XHR load / HTTP404
    Dependency/completion gate
    404 not accepted as HTTP success
    Application state
    Outcome yok
  3. UI complete iş sonucunu fazla yorumlamadı

    Body consumption complete-text olsa bile 404 result uygulamanın beklediği successful content değildir. Response varlığı ve parsed data validation başka gate’lerdir. Status ile content outcome tek done label’a indirgenmez.

    Resource/API record
    Fetch fulfilled / XHR load / HTTP404
    Dependency/completion gate
    404 not accepted as HTTP success
    Application state
    Body read complete / business success not inferred
  4. Abort headers receipt’i geriye çevirmedi

    abortAfterHeaders fulfilled Response ve status 200 sağlar; bodyCompleteBeforeAbort false’tur. Default abort reason AbortError ve bodyReadOutcome AbortError olur. Headers alınmışken body’nin tamamlanmaması mümkündür.

    Resource/API record
    Response200 exists / body read AbortError
    Dependency/completion gate
    404 not accepted as HTTP success
    Application state
    Body read complete / business success not inferred
  5. Cancellation server rollback kanıtı olmadı

    requestReachedOriginSupplied true ve serverNeverProcessedProven false’tur. Abort client consumption’ı durdurabilir; server’ın request’i hiç görmediği veya action’ı geri aldığı sonucu çıkmaz. Retry için product reconciliation ayrı gerekir.

    Resource/API record
    Response200 exists / body read AbortError
    Dependency/completion gate
    Client abort / server processing not disproven
    Application state
    Body read complete / business success not inferred
  6. Failure sınırı public GET scope’unda kapandı

    Bu public GET ledger’ı status, Response ve body state’i ayırır. Mutating transaction, current authorization veya server rollback ölçülmez. Correct UI handling, hangi completion’ın gerçekleşmediğini açıkça söylemelidir.

    Resource/API record
    Response200 exists / body read AbortError
    Dependency/completion gate
    Client abort / server processing not disproven
    Application state
    Status/body/cancellation distinct / mutation unmeasured

VARSAYIM · SINIR · KONTROL

Yüklenmiş kaynak trusted sonuç değildir

Loading order bir dependency contract’ıdır. A’nın B’den önce gerekli state’i kurması gerekiyorsa async pair ile request’lerin declaration sırasına güvenmek yanlış kabul koşuludur. Etki undefined dependency, eksik DOM update veya yarım UI state olabilir. Script downloaded observation’ı state initialization’ın tamamlandığını kanıtlamaz.

Kontrol bağımlılığı explicit module graph veya appropriate ordered execution ile kurmak, async completion’ın nerede beklendiğini ayrıca belirlemektir. defer DOM parsing sonrasını sağlar; backend policy, identity veya business validation sağlamaz. Loading event’i uygulama invariant’ının yerine geçirilmemelidir. Sahnede script’ler yalnız harmless sıra defterine isim ekler.

Cancellation ve completion’ı fazla yorumlama

404 için fulfilled Promise’ı successful action sayan client yanlış UI kararına gider. Diğer uçta aborted request’i server hiç görmedi diye kabul etmek gözlem sınırını aşar. Condition response status, body state ve client outcome’un ayrı tutulmamasıdır; impact uygulamanın operation’ına bağlıdır.

Kontrol status range, expected content format, complete consumption ve action contract’ını ayrı değerlendirmektir. Abort sonrası received headers durabilir ama body unavailable olabilir. Retry server outcome unknown ise method semantics ve product reconciliation gerektirir. Bu lesson’in public GET fixture’ı authorization veya mutating transaction test etmez.

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

Hareket olmadan bütün senaryoları oku

Loading order

  1. Downloaded B evaluation kanıtı olmadı

    Loading kayıtlarının üreticileri parser’ın declaration’ı, loader’ın ready bilgisi ve script’in evaluation sonucudur. API kayıtlarında Fetch/XHR status ile body reader’ın tamamlanması ayrı tutulur. Selector ise yalnız authored status/acceptedAsHttpSuccess satırlarını okur; gerçek Browser log’u veya server commit ölçümü değildir. Ready B,A ve declaration A,B ayrı arrays’dir. B ready observation’ında executed list’in boş kalabilmesi normaldir. Download kaynak bytes’ını sağlar; evaluation dependency ve parser context başka koşullardır.

    Loading observations
    Declared A,B / ready B,A / evaluation separate
    Order/body comparison
    Gate bekliyor
    Evidence verdict
    Outcome yok
  2. Ordered ve async sonuçlar aynı input context’iyle karşılaştırıldı

    Defer A,B; seçilmiş async B,A verir. Async B,A possible fakat bütün possible sonuçlar değildir. Cache path source loading’i etkileyebilir; network bytes gözlenmeden executed source capture diye sunulmaz.

    Loading observations
    Declared A,B / ready B,A / evaluation separate
    Order/body comparison
    Defer A,B / selected async B,A
    Evidence verdict
    Outcome yok
  3. Module qualification dependency isimleriyle korundu

    Module helper.mjs ve main.mjs graph’ı default deferred’dır; defer ek effect taşımaz. Top-level await yokluğu ve normal MIME verilmiştir. Bu qualifiers tutulmadan module readiness timestamp’i broad guarantee sayılmaz.

    Loading observations
    Module graph qualified / no TLA
    Order/body comparison
    Defer A,B / selected async B,A
    Evidence verdict
    Outcome yok
  4. Lifecycle events aynı timestamp sayılmadı

    Parser complete, DOMContentLoaded ve window load farklı causal milestones’dır. Bu fixture deferBeforeDOMContentLoaded true sağlar; exact latency benchmark değildir. Evaluation ile visible UI outcome’unu ayrıca ilişkilendirmek gerekir.

    Loading observations
    Module graph qualified / no TLA
    Order/body comparison
    Defer before DCL / exact latency unknown
    Evidence verdict
    Outcome yok
  5. Dependency verdict gerçek browser genellemesi olmadı

    Bu seçilmiş context’te order açıklanabilir. CORS/policy refusal, arbitrary modules veya device timing ölçülmez. Source attribute ve dependency graph görünmeden tek load event’i order correctness kanıtı değildir.

    Loading observations
    Module graph qualified / no TLA
    Order/body comparison
    Defer before DCL / exact latency unknown
    Evidence verdict
    Selected order known / broader loader unmeasured
  6. Regression iki sıra ve required state’i birlikte kontrol etti

    Declaration, readiness, evaluation ve required initialization state’i ayrı kayıtlarla tekrar kontrol edilir. Sensitive source veya full application data gerekmez. Normal async reordering, source dependency varsa açıkça ele alınır.

    Loading observations
    Module graph qualified / no TLA
    Order/body comparison
    Defer before DCL / exact latency unknown
    Evidence verdict
    Recheck attributes/readiness/evaluation/initialization

Partial body

  1. Partial response iki milestone ile seçildi

    Loading kayıtlarının üreticileri parser’ın declaration’ı, loader’ın ready bilgisi ve script’in evaluation sonucudur. API kayıtlarında Fetch/XHR status ile body reader’ın tamamlanması ayrı tutulur. Selector ise yalnız authored status/acceptedAsHttpSuccess satırlarını okur; gerçek Browser log’u veya server commit ölçümü değildir. Headers sonrası status 200 ve fulfilled Response bulunur, fakat complete body yoktur. AbortError content read’e aittir. HTTP status başarılı aralıkta olabilirken body consumption başarısız olabilir.

    Loading observations
    Headers200 / Response fulfilled / body incomplete
    Order/body comparison
    Gate bekliyor
    Evidence verdict
    Outcome yok
  2. Body outcome ikinci success field’ından ayrıldı

    Body read AbortError’ı, ok true olabilecek Response’un varlığını yok etmez. Review body ownership/consumption state’ini ayrıca kaydeder. Absent content JSON document olarak yorumlanmaz; ikinci read için ownership de göz önünde tutulur.

    Loading observations
    Headers200 / Response fulfilled / body incomplete
    Order/body comparison
    Response retained / body read failed separately
    Evidence verdict
    Outcome yok
  3. Status oracle ayrı positive control’e bağlandı

    Normal XML 404 acceptedAsHttpSuccess false verir; count sıfırdır. Positive XML 404 true verir ve count bir olur. Bu oracle API completion’ı HTTP success’a yükselten observation’ı seçer; gerçek browser event log’u değildir.

    Loading observations
    404 acceptance oracle normal0 / positive1
    Order/body comparison
    Response retained / body read failed separately
    Evidence verdict
    Outcome yok
  4. Missing content event normal completion olmadı

    Alternatif trace’te body consumption sonucu eksikse fulfilled Response complete body kanıtı olmaz. Normal complete-text outcome’u missing event’e kopyalanmaz. Network interruption, abort ve logging gap causes farklı evidence ister.

    Loading observations
    404 acceptance oracle normal0 / positive1
    Order/body comparison
    Consumption coverage missing / do not infer complete
    Evidence verdict
    Outcome yok
  5. Server state verdict unknown kaldı

    Client abort kaydı server’ın neyi işlediğini tek başına açıklamaz. Bu fixture origin-reached şartını sağlar fakat transaction veya rollback ölçmez. Server outcome UNKNOWN kalabilir; retry bu boşluğu otomatik çözmez.

    Loading observations
    404 acceptance oracle normal0 / positive1
    Order/body comparison
    Consumption coverage missing / do not infer complete
    Evidence verdict
    UNKNOWN: unobserved server processing/rollback
  6. Yeni evidence status/body/action scope’unda tutuldu

    Review status, content type, consumed body outcome ve gerekiyorsa scoped server result ister. Credential veya full private body gerekmez. HTTP cache choice, Cache API veya proxy policy ile karıştırılmadan ayrıca kaydedilir.

    Loading observations
    404 acceptance oracle normal0 / positive1
    Order/body comparison
    Consumption coverage missing / do not infer complete
    Evidence verdict
    Needed: response/body outcome plus scoped server result

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

Loading defterinde iki sıra tut

Loading kayıtlarının üreticileri parser’ın declaration’ı, loader’ın ready bilgisi ve script’in evaluation sonucudur. API kayıtlarında Fetch/XHR status ile body reader’ın tamamlanması ayrı tutulur. Selector ise yalnız authored status/acceptedAsHttpSuccess satırlarını okur; gerçek Browser log’u veya server commit ölçümü değildir. Artifact’ta declarationOrder A/B, readyOrder B/A ve deferredExecution A/B alanları ayrıdır. Manual exercise’de hangi script attribute’unun execution sırasını koruduğunu söyle; B downloaded adımında executed list’inin hâlâ boş olduğunu kontrol et. Async branch’te seçilen B/A execution mümkündür ama normal sonuçların tamamı değildir.

Parser complete, DOMContentLoaded ve window load event’lerini aynı timestamp kabul etme. Native fixture yalnız selected causal events’in sırasını ölçebilir; artifactual sıra bir latency benchmark değildir. Module graph’ın dependency names’i ayrı olmalıdır. Source loading aynı resource URL için cache path kullanabileceğinden network bytes ile executed source eşitliğini varsayma.

B, A’nın hazırladığı veriye bağımlıysa iki parser-inserted external classic script’i async olarak sıraya koymak dependency’yi korumaz. Bu durumda declaration sırasıyla defer kullan veya module graph’ta bağımlılığı import ile açıkça belirt. Örnekte B önce ready olduğunda bile deferred A/B evaluation sırası korunmalıdır. Bağımsız script için async seçimi başka bir karardır; yalnız dosyaların HTML’deki sırası bunu bağımlı script için güvenli hale getirmez.

API sonucu üç alanda anlat

404 Fetch için promise=fulfilled-response, status404/okfalse ve body consumption outcome’unu ayrı yaz. XHR row’da event=load ile status404 beraber bulunur. Abort-after-headers row’unda Response var ama bodyRead=AbortError’dır. Selector status>=400 olduğu halde acceptedAsHttpSuccess=true olan inconsistent observation’ı seçer; normal0, positive1 ve missing0 sonucunun evidence sınırını açık tut.

Manual inceleme benign fixture’ın GET target’ı üzerinde read-only olsun. Body ikinci kez okunmak istenirse ownership/consumption state’ini düşün; absent content’i JSON document sanma. Cache path için Request.cache ve HTTP response policy’yi beraber kaydet. Console’da görülen “done” metni bu alanların yerine geçmez; uygulamanın ürettiği log bağlamı gerekir.

Fetch consumer önce status/ok kararını, sonra gerekli body okumasını tamamlamalı; ancak bu işlemler başarılıysa UI’ı yeni content ile ilerletmelidir. Bu örnekte fulfilled 404, HTTP success değildir. Headers sonrası abort edilmiş 200 response da okunmuş content sağlamaz; body reader’ın AbortError sonucunu işleyip başarılı yükleme state’ini üretme. Normal text receipt ile bu iki dalın UI sonuçlarını ayrı karşılaştır; request’in client’ta iptal edilmesi server’da hiçbir işlem yapılmadığını kanıtlamaz.

ŞİMDİ VAKAYA UYGULA

Script order, fulfilled Response ve cancellation hangi ayrı kararları gerektirir?

A,B declaration’ında B önce ready olabilir: defer A,B sırasını korur, seçilmiş async branch B,A çalışır. Public missing note 404 ile fulfilled Response verebilir. Headers sonrası abort ise Response’u bırakır fakat body read AbortError olur.

Vakadaki response receipt, parsing, callback ve görünür DOM sonucunu sıraya koy. Eski başlığın kalmasını bu dersteki browser state ayrımlarıyla açıklamayı dene.

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

ÖRNEĞİ BİRLİKTE OKUYALIM

Loading order ve API outcome defteri

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

Ham kaydı ve alan açıklamalarını oku
{
  "scriptContext": {
    "parserInsertedExternalClassic": true,
    "cssBlockingAbsentSupplied": true,
    "normalSameOriginMimeSupplied": true,
    "moduleTopLevelAwaitAbsentSupplied": true
  },
  "scriptPair": {
    "declarationOrder": [
      "A",
      "B"
    ],
    "readyOrderSupplied": [
      "B",
      "A"
    ],
    "deferredExecution": [
      "A",
      "B"
    ],
    "asyncSelectedExecution": [
      "B",
      "A"
    ],
    "asyncOrderGuaranteed": false,
    "deferBeforeDOMContentLoaded": true
  },
  "module": {
    "dependency": "helper.mjs",
    "entry": "main.mjs",
    "defaultDeferred": true,
    "deferAttributeAddsEffect": false,
    "graphWithoutTopLevelAwait": true
  },
  "fetch404": {
    "path": "/notes/missing",
    "promiseOutcome": "fulfilled-response",
    "status": 404,
    "ok": false,
    "body": "Not found",
    "bodyReadOutcome": "complete-text",
    "acceptedAsHttpSuccess": false
  },
  "xhr404": {
    "path": "/notes/missing",
    "event": "load",
    "readyState": 4,
    "status": 404,
    "body": "Not found",
    "acceptedAsHttpSuccess": false
  },
  "abortAfterHeaders": {
    "path": "/notes/slow",
    "requestReachedOriginSupplied": true,
    "promiseOutcome": "fulfilled-response",
    "status": 200,
    "bodyCompleteBeforeAbort": false,
    "defaultAbortReason": "AbortError",
    "bodyReadOutcome": "AbortError",
    "serverNeverProcessedProven": false
  },
  "cacheChoices": [
    {
      "value": "default",
      "selection": "normal HTTP cache eligibility/freshness"
    },
    {
      "value": "no-cache",
      "selection": "matching response requires validation"
    },
    {
      "value": "no-store",
      "selection": "bypass and do not write browser HTTP cache"
    }
  ],
  "selector": {
    "language": "XPath",
    "xml": "<observations><result status=\"404\" acceptedAsHttpSuccess=\"false\"/></observations>",
    "xpath": "count(/observations/result[number(@status)>=400 and @acceptedAsHttpSuccess=\"true\"])",
    "expected": 0,
    "positiveFixtureXml": "<observations><result status=\"404\" acceptedAsHttpSuccess=\"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."
  }
}
readyOrder / execution
Resource availability ile JavaScript evaluation iki ayrı sıra.
fetch404 / xhr404
API completion ile HTTP success ayrı; load/fulfilled 404 mümkündür.
abortAfterHeaders
Headers arrival korunur; incomplete body read abort olabilir.
cacheChoices
Browser HTTP cache seçimi; Cache API veya bütün proxy policy’si değil.

Selected resource-ready order, parser context ve full/partial response events supplied. Exact latency, general module/TLA graph, CORS/policy refusal veya server rollback ölçülmez.

İki yanlış kanı

defer script’ler declaration sırasıyla download olur; async her zaman ters sıradır.

defer execution sırasını korur, ready order farklı olabilir. async order garantisi yoktur; B/A yalnız selected fixture’dır.

Fetch fulfill/XHR load geldiğinde HTTP başarılıdır; abort server’i rollback eder.

404 normal completion yolunda gelebilir. Abort client operation’ı keser, server’ın işlem yapmadığını veya rollback’i kanıtlamaz.

SIRA SENDE

Bu hikâyeyi sen çöz.

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

B önce ready oldu; A önce tanımlandı. Bu defer script’ler hangi sırada çalışır?

  1. A, B. Tanımlanma sırası korunur.
  2. B, A. defer her zaman download bitiş sırasını izler.
Gerekçeli cevabı oku

A, B. Tanımlanma sırası korunur. — Bu context’te defer script’ler sıralı olarak DOMContentLoaded’dan önce çalışır. Ready sırası bunu tersine çevirmez.

200 headers alındıktan sonra abort, body read sonucunu nasıl etkiler?

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

abortAfterHeaders
{"path":"/notes/slow","requestReachedOriginSupplied":true,"promiseOutcome":"fulfilled-response","status":200,"bodyCompleteBeforeAbort":false,"defaultAbortReason":"AbortError","bodyReadOutcome":"AbortError","serverNeverProcessedProven":false}
  1. Abort, server’ın hiç request almadığını kanıtlar.
  2. Response fulfilled kalabilir; body read AbortError verir.
Gerekçeli cevabı oku

Response fulfilled kalabilir; body read AbortError verir. — Bu örnekte promiseOutcome=fulfilled-response, bodyReadOutcome=AbortError. Origin işlemi daha önce gerçekleşmiş olabilir.

Fetch 404 ve XHR 404 neden network failure ile aynı sonuç değildir? no-cache ve no-store farkını da açıkla.

Gerekçeli cevabı oku

Fetch 404 için fulfilled Response ve ok=false verir. XHR 404 load ve readyState=4 ile tamamlanır. İkisi HTTP başarı sonucu değildir, fakat yalnız 404 nedeniyle network failure da sayılmaz. no-cache matching cached response için validation ister. no-store bu örnekte browser HTTP cache’i bypass eder ve yeni entry yazmaz. Bu seçenekler application cache veya business rollback garantisi değildir.

□ API completion’ı HTTP başarı sonucu saymadım.

□ Validation gerekliliğini cache saklama yasağından ayırdım.

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

Kaynaklar ve kapsam