Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-09.S01

Cache keys, Vary ve personalized content

Fresh entry yanlış variant veya audience için doğru olmaz. Public catalog dilini, freshness’i ve personal bypass sınırını ayrı kararlar olarak izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Public HIT

  1. Request bilgileri hazır

    GET catalog request’i en dilini ve doğrulanmış public sınıfını seçer. Stored entry de en, age 8/lifetime 60’tır. Bunlar yerel hesaplayıcının girdileridir; henüz HIT kararı veya browser’a body delivery yapılmadı.

    Request facts
    GET catalog; language en; public
    Stored public entry
    Public en entry; age8; lifetime60
    Reuse decision
    No decision
    Delivery selection
    No body selected
  2. Reuse profile seçildi

    Public-only profile request class’ını değerlendirir. Key ve class seçimi local işlemdir; network hop değildir.

    Request facts
    Profile facts ready; public; en
    Stored public entry
    Public en entry; age8; lifetime60
    Reuse decision
    Candidate evaluation pending
    Delivery selection
    No body selected
  3. Aday entry bilgisi

    Stored public entry’nin language, audience ve age bilgisi birlikte okunur; başka aktöre message gönderilmez.

    Request facts
    Profile facts ready; public; en
    Stored public entry
    Candidate: public; en; age8
    Reuse decision
    Candidate facts ready
    Delivery selection
    No body selected
  4. Matching ve reuse kararı

    Policy, farklı variant, stale entry ve personal class için ayrı gerekçeler üretir. Henüz alınmamış bir origin body’si varsayılmaz.

    Request facts
    Request public; en
    Stored public entry
    Candidate: public; en; age8
    Reuse decision
    HIT; matching-public-fresh
    Delivery selection
    No body selected
  5. Delivery seçim sonucu

    Public class, en/en variant eşleşmesi ve 8<60 freshness koşulu HIT verir; Atlas catalog body’si yerel entry’den seçilir. originAction none’dır. Bu seçim, body’nin gerçek browser’a aktarıldığının kaydı değildir.

    Request facts
    Request public; en
    Stored public entry
    Candidate: public; en; age8
    Reuse decision
    HIT; matching-public-fresh
    Delivery selection
    Selected: Atlas catalog; none

Variant MISS

  1. Request bilgileri hazır

    GET catalog request’i tr ister; stored public entry en dilindedir. Entry’nin age 8/lifetime 60 bilgisi, language farkını ortadan kaldırmaz. Yerel reuse kararı henüz verilmedi; origin’den yeni body alınmış değildir.

    Request facts
    GET catalog; language tr; public
    Stored public entry
    Public en entry; age8; lifetime60
    Reuse decision
    No decision
    Delivery selection
    No body selected
  2. Reuse profile seçildi

    Public-only profile request class’ını değerlendirir. Key ve class seçimi local işlemdir; network hop değildir.

    Request facts
    Profile facts ready; public; tr
    Stored public entry
    Public en entry; age8; lifetime60
    Reuse decision
    Candidate evaluation pending
    Delivery selection
    No body selected
  3. Aday entry bilgisi

    Stored public entry’nin language, audience ve age bilgisi birlikte okunur; başka aktöre message gönderilmez.

    Request facts
    Profile facts ready; public; tr
    Stored public entry
    Candidate: public; en; age8
    Reuse decision
    Candidate facts ready
    Delivery selection
    No body selected
  4. Matching ve reuse kararı

    Policy, farklı variant, stale entry ve personal class için ayrı gerekçeler üretir. Henüz alınmamış bir origin body’si varsayılmaz.

    Request facts
    Request public; tr
    Stored public entry
    Candidate: public; en; age8
    Reuse decision
    MISS; variant-mismatch
    Delivery selection
    No body selected
  5. Delivery seçim sonucu

    tr/en farkı MISS ve variant-mismatch verir; bodySelected null kalır. fetch-required-not-executed, yeni origin isteğinin gerekli olduğunu söyler; yapılmış bir fetch veya alınmış body göstermez.

    Request facts
    Request public; tr
    Stored public entry
    Candidate: public; en; age8
    Reuse decision
    MISS; variant-mismatch
    Delivery selection
    Selected: null; fetch-required-not-executed

Stale validation

  1. Request bilgileri hazır

    Request ve public entry en seçer, fakat bu dalda age ve lifetime ikisi de 60’tır. Yerel hesaplayıcı freshness sınırını değerlendirecektir; validation request’i gönderilmedi ve başarılı origin yanıtı yoktur.

    Request facts
    GET catalog; language en; public
    Stored public entry
    Public en entry; age60; lifetime60
    Reuse decision
    No decision
    Delivery selection
    No body selected
  2. Reuse profile seçildi

    Public-only profile request class’ını değerlendirir. Key ve class seçimi local işlemdir; network hop değildir.

    Request facts
    Profile facts ready; public; en
    Stored public entry
    Public en entry; age60; lifetime60
    Reuse decision
    Candidate evaluation pending
    Delivery selection
    No body selected
  3. Aday entry bilgisi

    Stored public entry’nin language, audience ve age bilgisi birlikte okunur; başka aktöre message gönderilmez.

    Request facts
    Profile facts ready; public; en
    Stored public entry
    Candidate: public; en; age60
    Reuse decision
    Candidate facts ready
    Delivery selection
    No body selected
  4. Matching ve reuse kararı

    Policy, farklı variant, stale entry ve personal class için ayrı gerekçeler üretir. Henüz alınmamış bir origin body’si varsayılmaz.

    Request facts
    Request public; en
    Stored public entry
    Candidate: public; en; age60
    Reuse decision
    VALIDATE; matching-stale
    Delivery selection
    No body selected
  5. Delivery seçim sonucu

    Eşleşen entry age=lifetime=60 sınırında VALIDATE verir; bodySelected null kalır. validation-required-not-executed, başarılı doğrulama değildir. Bu profile stale body’yi seçmez ve origin yanıtı uydurmaz.

    Request facts
    Request public; en
    Stored public entry
    Candidate: public; en; age60
    Reuse decision
    VALIDATE; matching-stale
    Delivery selection
    Selected: null; validation-required-not-executed

Personal bypass

  1. Request bilgileri hazır

    Request Duru’nun /notes/mine personal route’una aittir. Bu public-only profile önce shared lookup’ı atlayacaktır. Verilmiş class bir login testi değildir; origin policy henüz çalıştırılmadı.

    Request facts
    GET /notes/mine; personal
    Stored public entry
    Public en entry; age8; lifetime60
    Reuse decision
    No decision
    Delivery selection
    No body selected
  2. Shared lookup atlandı

    Personal class, public-only profile dışında kaldığı için shared lookup yapılmaz. Origin policy’ye geçiş burada henüz bir HTTP çağrısı değildir.

    Request facts
    Profile facts ready; personal; en
    Stored public entry
    Public entry unchanged; lookup skipped
    Reuse decision
    Candidate evaluation pending
    Delivery selection
    No body selected
  3. Shared entry değişmedi

    Personal request için public candidate lookup yapılmaz; mevcut shared entry’nin body ve metadata’sı değişmez.

    Request facts
    Profile facts ready; personal; en
    Stored public entry
    Public entry unchanged; lookup skipped
    Reuse decision
    Personal bypass selected
    Delivery selection
    No body selected
  4. Matching ve reuse kararı

    Policy, farklı variant, stale entry ve personal class için ayrı gerekçeler üretir. Henüz alınmamış bir origin body’si varsayılmaz.

    Request facts
    Request personal; en
    Stored public entry
    Public entry unchanged; lookup skipped
    Reuse decision
    BYPASS; personal-outside-public-profile
    Delivery selection
    No body selected
  5. Delivery seçim sonucu

    Personal route için BYPASS ve personal-outside-public-profile sonucu verilir; shared body seçilmez. origin-policy-required-not-executed sonraki sorumluluğu gösterir. Kullanıcı reddi veya başarılı origin authorization sonucu verilmiş değildir.

    Request facts
    Request personal; en
    Stored public entry
    Public entry unchanged; lookup skipped
    Reuse decision
    BYPASS; personal-outside-public-profile
    Delivery selection
    Selected: null; origin-policy-required-not-executed

ROLLER · STATE · VERİ AKIŞI

Cache key, hangi request’leri eşdeğer sayar?

Atlas public catalog’ı Türkçe ve İngilizce gösterebilsin. İki request aynı URL’ye gitse de seçilen representation farklıdır. Cache key, yeniden kullanılabilir response seçerken hangi request’lerin eşdeğer sayıldığını belirler. Yalnız hız için üretilen rastgele bir string değildir. Buradaki profile, GET method’unu, tam public target URI’yi ve Accept-Language değerini birlikte tutar.

Response seçimini etkileyen bir farkı key kararından çıkarırsan iki ayrı representation aynı entry’ye aday olabilir. Örnek catalog dili üzerinden bu farkı gösterir. Public URI’nin query’si ve authority’si karşılaştırmada korunur; hiçbir query parametresi sessizce atılmaz. Burada kullanılan sınırlı formatter, her HTTP target’ı için geçerli bir canonicalization parser’ı değildir.

Vary bir request-header eşleşme talebidir

Origin, Vary: Accept-Language ile response seçiminin bu request header’ına bağlı olduğunu belirtir. Örnekte en request’iyle alınmış entry, tr request’i için eşleşen aday değildir. Vary kimlik doğrulamaz ve authorization sağlamaz. Header isimleri response metadata’sında bulunur; karşılaştırılan değerler ise response’u üreten request ile yeni request’ten gelir.

Bu profile yalnız sabit tr/en değerlerini ve header’ın bulunmadığı absent durumunu karşılaştırır. Absent ancak absent ile eşleşir; Vary içindeki * ise matching reuse’u engeller. Genel field-value normalizasyonu, ilgili header’ın semantics’ine bağlıdır. Bütün header değerlerini lowercase yapmak, anlamlarının eşit olduğunu göstermez.

Matching, fresh ve public ayrı kapılardır

Normal durumda request ile stored entry en seçer; current_age = 8, lifetime = 60 ve audience public’tir. Bu bilgiler birlikte HIT kararını verir. Request dili tr olursa entry hâlâ fresh olabilir ama variant match false olur. Freshness, farklı dildeki representation’ı doğru seçim haline getirmez.

Age 60 ve lifetime 60 olduğunda variant eşleşse bile bu profile validation ister. Örnek stale serving uygulamaz; bu, HTTP’nin bütün stale-use seçeneklerini yasaklayan genel bir kural değildir. Age, version validator veya uygulamadaki kaydın güncel olduğuna dair garanti değildir. Validation için yeni response alma akışı bu local kararın ardından gelir.

Personalized ve tenant-scoped content

Duru’nun personal note’u için önce shared lookup bypass edilir. Session cookie görmek, Authorization header görmek ve origin’in personal representation üretmesi aynı bilgi değildir. Client’ın yazdığı tenant veya role string’i, response’u public saymak için güvenilir kanıt değildir. Burada route ve audience bilgisi, önceden doğrulanmış policy girdisi olarak verilmiştir.

Public cache key’ine tenant eklemek, record authorization’ın yerini alamaz. Key’ler ayrılsa da yanlış scope’a verilmiş response’un body’si düzelmez. Atlas personal response’u shared storage dışında tutar. Field-name argument’i olmayan private ile no-store farklı storage sınırları koyar; bu personal response için private, no-store birlikte kullanılır.

Poisoning ve deception neden ayrı kavramlar?

Cache poisoning, bozulmuş veya uygunsuz bir response’ın sonraki kullanıcılar için reusable hale gelmesiyle ilgilidir. Cache deception ise sensitive/dynamic content’in yanlış cache classification nedeniyle shared storage’a girmesiyle ilgilidir. İkisinde de cached body doğru diye varsaymak güven sınırını atlar; etkileri ve kararın yanlış verildiği nokta farklıdır.

Policy-conflict kaydında routeClass public, representationAudience personal yazılıdır. Bağımsız guard, bu iki doğrulanmış declaration çeliştiğinde storage ve delivery’yi reddeder. Buradaki soru “cache’e alınabilecek sınıf ile body’nin audience’ı uyumlu mu?” sorusudur. Bu kayıt, saldırı request’i veya gerçek HTTP parser farkı üretmeden korunacak invariant’ı gösterir.

Karar kaydı sonucu kadar sınırını da taşısın

Artifact’te decision, reason, bodySelected ve originAction ayrı alanlardır. MISS durumunda bodySelected null’dır; model elinde olmayan yeni origin body’sini uydurmaz. VALIDATE kararında da aynı durum geçerlidir. BYPASS bir user denial değildir; burada shared reuse’dan çıkıp origin policy’ye geçme kararıdır.

Request evidence eksikse not-computed sonucu verilir. Bu sonuç temiz cache veya güvenli sistem kanıtı değildir; karar için yeterli bilgi olmadığını söyler. Gözlem için ham session credential, personal note veya access token saklamak gerekmez. Representation class ve verilen karar, bu örnekte gerekçeyi açıklamaya yeter.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Variant mismatch

  1. Stored language request language’den ayrıldı

    Entry GET https://books.example/catalog için language en, audience public ve body Atlas catalog taşır. Yeni request language tr’dir. Vary accept-language seçer; iki normal catalog görünümü aynı variant değildir.

    Candidate facts
    Stored en / request tr / public target
    Reuse policy gate
    Gate bekliyor
    Body/audience boundary
    Body seçilmedi
  2. Freshness key mismatch’i telafi etmedi

    Age 8, lifetime 60 olsa da variant-mismatch MISS olur. TTL’yi kısaltmak language key sorununu çözmez. Target ve method eşleşmesi seçilmiş request header boyutunun da eşleştiğini kanıtlamaz.

    Candidate facts
    Stored en / request tr / public target
    Reuse policy gate
    Fresh but variant mismatch / MISS
    Body/audience boundary
    Body seçilmedi
  3. Shared body yanlış variant’a seçilmedi

    bodySelected null kalır; originAction fetch-required-not-executed olur. Bu local model fetch yapmaz. Required next action ile elde edilmiş yeni representation aynı state değildir; missing body zorla en copy ile doldurulmaz.

    Candidate facts
    Stored en / request tr / public target
    Reuse policy gate
    Fresh but variant mismatch / MISS
    Body/audience boundary
    MISS / body null / fetch not executed
  4. Stale normal candidate başka reason verdi

    Stale case language en ile eşleşir, fakat age 60 lifetime 60’a eşittir. Bu profile staleServing false’tur. Key doğru olduğu halde VALIDATE gerekir; variant MISS ile freshness failure tek reason’da birleştirilmez.

    Candidate facts
    Matching en / age60 / VALIDATE
    Reuse policy gate
    Fresh but variant mismatch / MISS
    Body/audience boundary
    MISS / body null / fetch not executed
  5. Validation ihtiyacı başarılı origin sonucu olmadı

    Stale bodySelected null, originAction validation-required-not-executed’tır. Bu sonuç gerçek origin round trip veya 304 değildir. Candidate reuse gate’i yalnız required sonraki flow’u tanımlar.

    Candidate facts
    Matching en / age60 / VALIDATE
    Reuse policy gate
    Stale: body null / validation not executed
    Body/audience boundary
    MISS / body null / fetch not executed
  6. Key ve freshness scope’u user policy’ye taşmadı

    Bu public-only conservative profile’da normal variant ve stale kararları açıktır. General header normalization veya gerçek authorization hesaplanmaz. Key dimension, client identity claim’i yerine geçmez; HIT bile user grant’i değildir.

    Candidate facts
    Matching en / age60 / VALIDATE
    Reuse policy gate
    Stale: body null / validation not executed
    Body/audience boundary
    Reuse scope known / identity-authority separate

Audience conflict

  1. Trusted declarations kendi audience’larıyla görüldü

    policyConflict routeClass public, representationAudience personal verir. Route görünümü ile body audience çelişir. URL classification’ı tek başına representation’ın public olduğu hükmünü vermek için yeterli değildir.

    Candidate facts
    Route public / representation personal
    Reuse policy gate
    Gate bekliyor
    Body/audience boundary
    Body seçilmedi
  2. Conflict storage kararından önce reddedildi

    Bu inert conflict decision REJECT üretir ve bodySelected null kalır. Response production ile storage policy aynı approved classification’a dayanmalıdır. Personal audience declaration’ı public route label’ı tarafından sessizce silinmez.

    Candidate facts
    Route public / representation personal
    Reuse policy gate
    REJECT / conflicting audience / body null
    Body/audience boundary
    Body seçilmedi
  3. Reject confidentiality olayı gibi sunulmadı

    Bu record guarded result gösterir; başka kullanıcının content’i okunmaz veya cache entry’si değiştirilmez. Potential impact yanlış recipient’a delivery olabilir, fakat counterexample gerçek disclosure evidence değildir.

    Candidate facts
    Route public / representation personal
    Reuse policy gate
    REJECT / conflicting audience / body null
    Body/audience boundary
    Guarded conflict / no disclosure observed
  4. Personal normal route conflict’ten ayrıldı

    Personal case https://books.example/notes/mine, class personal ve language en verir. Decision BYPASS, reason personal-outside-public-profile’dır. Bilinen personal route ile çelişkili declarations aynı failure class değildir.

    Candidate facts
    Personal route / BYPASS / body null
    Reuse policy gate
    REJECT / conflicting audience / body null
    Body/audience boundary
    Guarded conflict / no disclosure observed
  5. BYPASS independent origin policy gerektirdi

    originAction origin-policy-required-not-executed’tır; shared body seçilmez. Public profile dışında olmak reject veya authenticated allow anlamına gelmez. Tenant isolation, object authorization ve cache partitioning ayrı gate’lerdir.

    Candidate facts
    Personal route / BYPASS / body null
    Reuse policy gate
    Origin policy required / not executed
    Body/audience boundary
    Guarded conflict / no disclosure observed
  6. Classification kontrolünün runtime sınırı korundu

    Typed conservative guard’ın kararları local candidate scope’undadır. Gerçek edge parser, CDN, credential veya tenant enforcement ölçülmez. Conflict reject ile personal bypass ayrı tutulunca hangi owner’da yeni evidence gerektiği anlaşılır.

    Candidate facts
    Personal route / BYPASS / body null
    Reuse policy gate
    Origin policy required / not executed
    Body/audience boundary
    REJECT ≠ BYPASS / actual enforcement unmeasured

VARSAYIM · SINIR · KONTROL

Aynı URL sonucunu ayrı kararlarla incele

Bir cached 200 görmek doğru audience ve doğru representation seçildiğini göstermez. İlk soruyu küçük tut: bu public entry hangi method, target ve selected request header’ı için alınmıştı? Sonraki request aynı key’e uyuyor mu; stored response gerçekten reusable mı? Bu fixture’ın en→tr karşılaştırması iki ordinary catalog görünümü arasındadır.

Fresh entry’nin yanlış variant için seçilmesini yalnız TTL kısaltarak düzeltmek, key sorununu çözmez. Aynı şekilde key match olması stale branch’te validation gereksinimini kaldırmaz. Review’da key mismatch ve freshness failure ayrı reason olarak kalmalıdır; tek “cache kötü” etiketi sorunun hangi owner’da olduğunu gizler.

Key’ın içerdiği trusted dimension ile client’ın iddia ettiği identity aynı şey değildir. Bu ders personal branch’te bir user credential çözmez. Supplied allowed context’i gerçek authentication kanıtı gibi okumak modelin yapmadığı bir güvenlik kontrolünü varmış sayar.

Classification ile representation birlikte tutarlı mı?

Inert conflict record’unda public routeClass ile personal audience çelişir. Review sorusu bu çelişkinin hangi layer’da çözüleceğidir: response production ve storage policy aynı approved classification’a dayanmalıdır. Bir URL’nin görünümü tek başına response audience kararı vermez.

Poisoning/deception terimlerini bir request recipe’si yerine integrity ve confidentiality etkileriyle bağla. Buradaki counterexample guarded result üretir; başka kullanıcının verisini okumaz ve entry’yi bozmaz. Native typed guard’ın geçmesi de gerçek edge parser, tenant policy veya provider cache davranışını doğrulamaz.

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

Hareket olmadan bütün senaryoları oku

Decision matrix

  1. Public matching candidate positive control oldu

    Bu kaydı üreten, request facts ile stored entry’yi karşılaştıran yerel typed reuse fonksiyonudur. decision/reason/bodySelected/originAction aynı candidate kapsamındadır; gerçek cache access log’u değildir. MISS, VALIDATE ve BYPASS, sonraki owner’dan alınmış sonuç değil, henüz yürütülmemiş iş gereksinimidir. Normal en/en, age 8 ve public class için HIT, matching-public-fresh ve Atlas catalog body seçilir. Origin action none’dır. Body selection ile decision reason birlikte kontrol edilir; status 200 tek başına yeterli değildir.

    Candidate matrix
    HIT / matching-public-fresh / Atlas catalog
    Independent decision review
    Gate bekliyor
    Evidence verdict
    Body seçilmedi
  2. Üç non-HIT outcome ayrı beklentilerle incelendi

    tr/en MISS, age60 VALIDATE ve personal BYPASS ayrı decision/reason verir; üçünün bodySelected değeri null’dır. Aynı null body tek başına hangi sonraki owner flow’unun gerektiğini açıklamaz.

    Candidate matrix
    HIT / matching-public-fresh / Atlas catalog
    Independent decision review
    MISS / VALIDATE / BYPASS: body null
    Evidence verdict
    Body seçilmedi
  3. Origin action executed outcome diye yazılmadı

    fetch-required-not-executed, validation-required-not-executed ve origin-policy-required-not-executed sonraki ihtiyacı tanımlar. Bunlar gerçek network response, validation success veya authenticated policy result değildir.

    Candidate matrix
    Required next actions / no origin execution
    Independent decision review
    MISS / VALIDATE / BYPASS: body null
    Evidence verdict
    Body seçilmedi
  4. Conflict ve no-computation farklı koşullarla eşleşti

    Public/personal conflict REJECT’tir. missingEvidence request null olduğunda NOT-COMPUTED olur. Bir guard’ın reddi ile guard’a yeterli input sağlanmaması aynı evidence değildir.

    Candidate matrix
    Required next actions / no origin execution
    Independent decision review
    Conflict REJECT / missing request NOT-COMPUTED
    Evidence verdict
    Body seçilmedi
  5. Matrix consistency general cache correctness olmadı

    Bu profile sabit tr/en veya explicit absence input’ları kullanır. General HTTP cache grammar, distributed replication ve deployment purge uygulanmaz. Native typed function çalışması gerçek browser/CDN policy sonucu diye sunulmaz.

    Candidate matrix
    Required next actions / no origin execution
    Independent decision review
    Conflict REJECT / missing request NOT-COMPUTED
    Evidence verdict
    Finite profile consistent / general runtime unmeasured
  6. Regression body-metadata association’ı korudu

    Stored body ile Vary, audience, age ve lifetime aynı candidate’a bağlanır. Metadata değişiminde başka body’nin classification’ı taşınmaz. Scoped fields ve decision reasons yeterli olabilir; full personal content loglamak gerekmez.

    Candidate matrix
    Required next actions / no origin execution
    Independent decision review
    Conflict REJECT / missing request NOT-COMPUTED
    Evidence verdict
    Recheck candidate/body/Vary/audience/age

Missing request

  1. Input yokluğu normal en request sayılmadı

    Bu kaydı üreten, request facts ile stored entry’yi karşılaştıran yerel typed reuse fonksiyonudur. decision/reason/bodySelected/originAction aynı candidate kapsamındadır; gerçek cache access log’u değildir. MISS, VALIDATE ve BYPASS, sonraki owner’dan alınmış sonuç değil, henüz yürütülmemiş iş gereksinimidir. missingEvidence request null’dır. Stored entry’nin language en olması yeni request’in en olduğunu göstermez. Default tahmini ile HIT üretmek request evidence’ı olmadan body seçmek olur.

    Candidate matrix
    Request null / stored entry still en
    Independent decision review
    Gate bekliyor
    Evidence verdict
    Body seçilmedi
  2. Gate input olmadığında decision üretmedi

    Decision NOT-COMPUTED olur ve safeSystemClaim false kalır. Bu REJECT, MISS veya güvenli HIT değildir. Observation coverage eksikliği için ayrı outcome kullanmak normal policy branches’ini yanlış etiketlemeyi önler.

    Candidate matrix
    Request null / stored entry still en
    Independent decision review
    NOT-COMPUTED / safeSystemClaim=false
    Evidence verdict
    Body seçilmedi
  3. Tam fixture eksik review’ü doldurmadı

    Normal case’teki en/en ve age 8 bilgisi başka observation’ın yerine kullanılamaz. Bu fixture öğretim beklentisi sağlar; request source ve gerçek seçilmiş header coverage’ı ayrı gereklidir.

    Candidate matrix
    Normal fixture is not missing-request evidence
    Independent decision review
    NOT-COMPUTED / safeSystemClaim=false
    Evidence verdict
    Body seçilmedi
  4. Required key dimensions açık envanterde tutuldu

    Bu profile method, complete target URI ve seçilmiş language ister. Absent field ile unsupported value guessed default’a çevrilmez. Input inventory oluşmadan stored candidate’ın reuse koşulu değerlendirilemez.

    Candidate matrix
    Normal fixture is not missing-request evidence
    Independent decision review
    Needed: method/complete target/language
    Evidence verdict
    Body seçilmedi
  5. Body selection ve safety claim’i withheld kaldı

    Request coverage yokken seçilmiş body verilmez ve sistemin bütün branches’inin güvenli olduğu söylenmez. Missing row, successful enforcement veya confidentiality violation kanıtı değildir.

    Candidate matrix
    Normal fixture is not missing-request evidence
    Independent decision review
    Needed: method/complete target/language
    Evidence verdict
    No body conclusion / safety unknown
  6. Yeni evidence minimum request scope’unda istendi

    Review’in ilerlemesi için method, canonical target, seçilmiş language ve trusted class gerekir. Credential veya private note body toplamak şart değildir. Yeni facts sağlandığında decision ve body selection birlikte yeniden hesaplanır.

    Candidate matrix
    Normal fixture is not missing-request evidence
    Independent decision review
    Needed: method/complete target/language
    Evidence verdict
    Collect minimal facts, then recompute candidate

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

Bir approved reuse profile oluştur

Bu kaydı üreten, request facts ile stored entry’yi karşılaştıran yerel typed reuse fonksiyonudur. decision/reason/bodySelected/originAction aynı candidate kapsamındadır; gerçek cache access log’u değildir. MISS, VALIDATE ve BYPASS, sonraki owner’dan alınmış sonuç değil, henüz yürütülmemiş iş gereksinimidir. Önce public representation set’ini tanımla; burada yalnız GET public catalog var. Complete target URI ve selected language eşleşmesini koru. Vary’nin söylediği boyut ile origin’in gerçekten seçtiği variant aynı contract’ın parçası olsun. Absent ve unsupported değerler için guessed default yerine açık karar kullan.

Personal veya sınıflandırması bilinmeyen representation’ı otomatik public cache’e alma. Bu profile personal route’ta bypass ve private, no-store seçer. Tenant isolation, object authorization ve cache partitioning farklı kontrollerdir; yalnız tenant prefix ekleyip diğerlerini kaldırma.

Stored body ile ona ait Vary, audience, age ve lifetime bilgisini birlikte tut. Metadata güncellemesinde farklı body’ye ait classification’ı sessizce taşıma. Bu ders bir bounded candidate değerlendirmesi yapar; deployment purge, distributed replication veya bütün Cache-Control grammar’ını uygulamaz.

Independent regression tablosunu owner kararına bağla

Normal en/en HIT, tr/en MISS, age60 VALIDATE ve personal BYPASS için decision ve selected body’yi ayrı doğrula. Son üçünde shared body null kalmalıdır. Public/personal conflict için reject ve missing evidence için not-computed ekle; bu iki sonuç aynı değildir.

Modelin dört aktörü aynı process içindeki mantıksal sorumluluklardır: request facts, stored entry, reuse decision ve delivery selection. Key oluşturma veya lookup için network oku çizilmez. Duru’nun gerçek Browser’da yeni body alması, önceki CDN dersindeki ayrı exchange ile açıklanır.

Node kontrolü selected typed function ve native URL component gözlemlerini çalıştırır. Gerçek Browser cache, CDN, authorization ve student understanding için ayrıca uygun kanıt gerekir. Regression tablosunda kayıt bulunmaması bütün branch’lerin güvenli olduğunu kanıtlamaz.

ŞİMDİ VAKAYA UYGULA

Key, freshness, audience ve input coverage nasıl ayrı kararlar üretir?

Public Atlas catalog entry’si en dilinde ve age 8’dir. en request HIT olur, tr request MISS olur; age 60 validation ister. Personal route public profile’ı bypass eder. Public route ile personal audience çelişirse reject, request yoksa not-computed sonucu korunur.

Vakadaki representation hangi cache owner’dan geliyor? Key kapsamı, freshness ve kullanıcının context’ini birlikte değerlendir; hit olması doğru viewer’a ait olduğunu kanıtlamaz.

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

ÖRNEĞİ BİRLİKTE OKUYALIM

Public cache candidate karar tablosu

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

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "method": "GET",
    "target": "https://books.example/catalog",
    "vary": [
      "accept-language"
    ],
    "publicOnly": true,
    "staleServing": false,
    "headerValues": "fixed tr/en or explicit absence; no general normalization"
  },
  "entry": {
    "method": "GET",
    "target": "https://books.example/catalog",
    "language": "en",
    "audience": "public",
    "body": "Atlas catalog",
    "age": 8,
    "lifetime": 60
  },
  "cases": {
    "normal": {
      "language": "en",
      "class": "public",
      "age": 8,
      "decision": "HIT",
      "reason": "matching-public-fresh",
      "bodySelected": "Atlas catalog",
      "originAction": "none",
      "target": "https://books.example/catalog"
    },
    "variant-miss": {
      "language": "tr",
      "class": "public",
      "age": 8,
      "decision": "MISS",
      "reason": "variant-mismatch",
      "bodySelected": null,
      "originAction": "fetch-required-not-executed",
      "target": "https://books.example/catalog"
    },
    "stale": {
      "language": "en",
      "class": "public",
      "age": 60,
      "decision": "VALIDATE",
      "reason": "matching-stale",
      "bodySelected": null,
      "originAction": "validation-required-not-executed",
      "target": "https://books.example/catalog"
    },
    "personal": {
      "language": "en",
      "class": "personal",
      "age": 8,
      "decision": "BYPASS",
      "reason": "personal-outside-public-profile",
      "bodySelected": null,
      "originAction": "origin-policy-required-not-executed",
      "target": "https://books.example/notes/mine"
    }
  },
  "policyConflict": {
    "routeClass": "public",
    "representationAudience": "personal",
    "decision": "REJECT",
    "bodySelected": null
  },
  "missingEvidence": {
    "request": null,
    "decision": "NOT-COMPUTED",
    "safeSystemClaim": false
  },
  "scope": "Declared conservative public-only profile, not a general HTTP cache or real authorization engine."
}
profile
Selected public-only karar kapsamı; her HTTP cache’e ait evrensel policy değildir.
decision / reason
HIT, MISS, VALIDATE ve BYPASS farklı owner kararlarıdır.
bodySelected
Yalnız matching public fresh HIT’te body seçilir; diğer sonuçlarda null kalır.
originAction
İstenen sonraki flow; bu local modelde HTTP çağrısı çalıştırılmaz.
policyConflict
Trusted declarations arasındaki çelişkiyi reddeden inert counterexample.

Bütün input ordinary supplied fixture’dır. Node selected policy function ve native URL parsing çalıştırır; gerçek HTTP/CDN/Browser cache, parser discrepancy, credential, tenant enforcement veya exploit reproduction yoktur.

İki yanlış kanı

Entry fresh ise aynı URL’ye gelen her kullanıcı için uygundur.

Freshness yalnız reuse kapılarından biridir; key/variant, audience ve eligibility de doğru olmalıdır.

Tenant’ı key’e eklemek authorization’ın yerini tutar.

Partitioning ve resource authorization ayrı sorumluluklardır; yanlış scope’a üretilmiş body’yi key düzeltemez.

SIRA SENDE

Bu hikâyeyi sen çöz.

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

Public candidate language=en; yeni request language=tr. Age 8, lifetime 60. En body’si doğrudan seçilir mi?

  1. Hayır. variant-miss için MISS; bodySelected=null.
  2. Evet. Fresh olmak bütün language variant’larını eşit yapar.
Gerekçeli cevabı oku

Hayır. variant-miss için MISS; bodySelected=null. — Fresh entry olsa da accept-language selector eşleşmez. Origin fetch gerekiyor, fakat bu artifact’te çalıştırılmaz.

Route public etiketli, fakat representationAudience=personal. Bu body public cache’e kabul edilir mi?

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

policyConflict
{"routeClass":"public","representationAudience":"personal","decision":"REJECT","bodySelected":null}
cases.personal
{"language":"en","class":"personal","age":8,"decision":"BYPASS","reason":"personal-outside-public-profile","bodySelected":null,"originAction":"origin-policy-required-not-executed","target":"https://books.example/notes/mine"}
  1. Evet. Public path etiketi bütün personal alanları public yapar.
  2. Hayır. Policy conflict REJECT; personal request BYPASS.
Gerekçeli cevabı oku

Hayır. Policy conflict REJECT; personal request BYPASS. — Public-only profile, personal representation’ı route etiketine dayanarak public yapmaz. Body seçilmez; personal yol origin policy’sini ayrıca ister.

Age=lifetime=60 için VALIDATE, eksik request için NOT-COMPUTED. Neden bunları cache hit veya güvenli sistem kanıtı sayamayız?

Gerekçeli cevabı oku

Age lifetime’a eşit olduğunda entry fresh değildir. Bu profile stale serving yapmaz; validation ister ve body seçmez. Missing evidence durumunda ise request yoktur, karar hiç hesaplanamaz. VALIDATE gerçek validation başarısı değildir; NOT-COMPUTED de izin veya ret kanıtı değildir. Bu tablo genel HTTP cache veya gerçek authorization engine testi değildir.

□ Stale sonucu ile eksik evidence’ı ayırdım.

□ Gerekli validation’ı tamamlanmış validation saymadım.

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

Kaynaklar ve kapsam