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.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Public HIT
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Üç 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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?
- Hayır. variant-miss için MISS; bodySelected=null.
- 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"}
- Evet. Public path etiketi bütün personal alanları public yapar.
- 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
- MDN — Vary headerDescription: request headers influencing response selection · Directives: wildcard and named headers
- RFC 9111 — HTTP Caching4.1 Calculating Cache Keys with the Vary Header Field · 4.2 Freshness · 5.2.2.5 no-store · 5.2.2.7 private · 7.1 Cache Poisoning
- MDN — Cache-Control headerResponse directives: private · Response directives: no-store
- PortSwigger — Web cache deceptionOverview: classification disagreement and poisoning/deception distinction