WEB / WEB-10.S01
Forms, JavaScript ve DOM data flow
Control value hangi aşamada request, JS value ve DOM text olur?
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Native navigation
- Controls hazır
Tea & Bread q değeri, repeated tag’ler ve browse submitter hazırdır. Bu dal constraintValid=true ve listenerCancel=false verir; browser henüz entry list’i encode etmedi veya native navigation request’i göndermedi.
- Browser document
- Controls hazır; DOM sonuç yok
- Owned book API
- Request yok; read yapılmadı
- Constraint/event
Örnekte native validation geçer ve submit event iptal edilmez; default navigation devam eder.
- Browser document
- Native gate passed; entries pending
- Owned book API
- Request yok; read yapılmadı
- Entry encode
Entry list, tekrarlanan tag’leri koruyarak encode edilir; GET navigation request’i hazırdır.
- Browser document
- GET navigation request hazır
- Owned book API
- Request yok; read yapılmadı
- Request geldi
Normal read request API’ye ulaştı; server q contract ve resource policy henüz pending.
- Browser document
- GET navigation request hazır
- Owned book API
- Read request geldi; validation pending
- Local server gate
Server’ın okuma policy’si bu örnekte kabul eder; Tea & Bread title, encoded HTML response için hazırlanır.
- Browser document
- GET navigation request hazır
- Owned book API
- HTML response hazır; title encoded
- Response geldi
Native navigation response browser’a ulaştı; yeni document parser/DOM sonucu henüz pending.
- Browser document
- HTML response geldi; parse pending
- Owned book API
- HTML response hazır; title encoded
- Local HTML parser
Seçilmiş benign HTML declaration parser outcome’u Tea & Bread text’idir; gerçek parser çalıştırılmaz.
- Browser document
- Yeni document text expected: Tea & Bread
- Owned book API
- HTML response hazır; title encoded
- Local DOM outcome
Yeni document için benign h2 text outcome’u gösterilir; bu network arrival değil local render sonucudur.
- Browser document
- Yeni document title: Tea & Bread
- Owned book API
- HTML response hazır; title encoded
Fetch handler
- Controls hazır
Form verisi hazırdır; bu dalda listener default navigation’ı iptal edip manualFetch=true yolunu seçecektir. Mevcut document korunacak, fakat ayrı Fetch request’i henüz yapılmadı ve server title okunmadı.
- Browser document
- Controls hazır; DOM sonuç yok
- Owned book API
- Request yok; read yapılmadı
- Local listener
Submit listener preventDefault uygular; q’yu string olarak okur ve ayrı Fetch okuma request’ini hazırlar.
- Browser document
- Default cancelled; fetch request hazır
- Owned book API
- Request yok; read yapılmadı
- Fetch request geldi
Ayrı fetch request API’ye ulaştı; native navigation başlamadı ve server gate henüz pending.
- Browser document
- Default cancelled; fetch request hazır
- Owned book API
- Fetch read geldi; validation pending
- Local server read
Server aynı q/resource contract’ını kabul ederek normal JSON title response’unu hazırlar.
- Browser document
- Default cancelled; fetch request hazır
- Owned book API
- JSON title response hazır
- Response geldi
Response browser’a ulaştı; handler’ın body okuması, JSON parse ve DOM update henüz tamamlanmadı.
- Browser document
- Response geldi; body pending
- Owned book API
- JSON title response hazır
- Local body read
Handler selected JSON body’yi okur; title string elde edilir, DOM text henüz değişmez.
- Browser document
- Body parsed; title string hazır
- Owned book API
- JSON title response hazır
- Local function scope
Callback lexical q binding’ine erişir; closure input’a trust eklemez ve output text hâlâ plain data’dır.
- Browser document
- Handler title hazır; textContent pending
- Owned book API
- JSON title response hazır
- Local textContent
h2.textContent’a title’ın kendisi atanır; mevcut document içinde Tea & Bread, literal text olarak gösterilir.
- Browser document
- Mevcut DOM literal: Tea & Bread
- Owned book API
- JSON title response hazır
Constraint reddi
- Controls hazır
Form verisi hazırdır, fakat bu dal constraintValid=false verir. Browser’ın yerel feedback’i server reddi değildir; henüz hiçbir submission, request veya yeni book response yoktur.
- Browser document
- Controls hazır; DOM sonuç yok
- Owned book API
- Request yok; read yapılmadı
- Local browser gate
Bu senaryoda constraint geçmez veya submit listener default’u iptal eder; server’a hiçbir message ulaşmaz.
- Browser document
- Constraint denied; network yok
- Owned book API
- Request yok; read yapılmadı
- Local feedback
Browser UI normal feedback verir; server validation ve resource lookup bu branch’ta çalışmış sayılmaz.
- Browser document
- Local feedback; server unchanged
- Owned book API
- Request yok; read yapılmadı
- Terminal state
Bu local outcome mevcut document’i korur; yeni book response veya DOM result üretilmez.
- Browser document
- Yeni result yok; local bitti
- Owned book API
- Request yok; read yapılmadı
Listener cancel
- Controls hazır
Form constraint’i uygundur; listenerCancel=true ve manualFetch=false seçilmiştir. Default navigation yerelde duracaktır ve yerine başka request başlatılmayacaktır. Server henüz bu form verisini almamıştır.
- Browser document
- Controls hazır; DOM sonuç yok
- Owned book API
- Request yok; read yapılmadı
- Local browser gate
Bu senaryoda constraint geçmez veya submit listener default’u iptal eder; server’a hiçbir message ulaşmaz.
- Browser document
- Default cancelled; network yok
- Owned book API
- Request yok; read yapılmadı
- Local feedback
Browser UI normal feedback verir; server validation ve resource lookup bu branch’ta çalışmış sayılmaz.
- Browser document
- Local feedback; server unchanged
- Owned book API
- Request yok; read yapılmadı
- Terminal state
Bu local outcome mevcut document’i korur; yeni book response veya DOM result üretilmez.
- Browser document
- Yeni result yok; local bitti
- Owned book API
- Request yok; read yapılmadı
ROLLER · STATE · VERİ AKIŞI
Control’dan entry list’e
Atlas’ın search form’u Tea & Bread başlığını q adıyla taşır; input’un id’si label/DOM lookup için kullanılırken name submission anahtarıdır. Entry list bütün görünen control’ların kopyası değildir: disabled control, unchecked checkbox, isimsiz alan ve seçilmemiş submit button dışarıda kalır. Readonly text control disabled değildir ve name’i varsa gönderilebilir. Aynı tag adı web/http için iki kez bulunur; entry list bunu ordered iki entry olarak korur. Plain object’e hemen çevirmek repeated field’ı kaybettirebilir. Hidden veya readonly value server için trusted identity değildir; bunlar UI/submission özellikleridir.
Submission birden fazla karar içerir
Normal submitter seçildikten sonra browser constraint validation ve cancelable submit event’i değerlendirir; listener preventDefault ile default navigation’ı durdurabilir. Seçilmiş native GET branch’ı UTF-8 URL-encoded entries ile navigation request’i hazırlar. fetch branch’ında listener default’u durdurur ve kendi ordinary read request’ini ayrıca hazırlar; fetch çağrısı native form navigation değildir. requestSubmit normal submitter/validation/event yolunu kullanır; submit() doğrudan yolunun aynı event/validation davranışını verdiği varsayılmaz. Browser kontrolü kullanıcı deneyimidir; server q tür/boyut contract’ını ve resource policy’yi ayrıca değerlendirir.
JavaScript value, function ve lexical scope
Text control’dan okunan "2" string’dir; string + number concatenation yapabilir, explicit Number dönüşümü ise ayrı number üretir ve domain kontrolü hâlâ gerekir. null ile undefined veya missing field aynı uygulama anlamı değildir. let/const block scope taşır; var’ın function scope’u farklıdır. const object binding’ini sabitler, içindeki title’ı otomatik immutable yapmaz. Function input/return sınırını açık tutmak DOM okuma ile normalize/policy/render kararını ayırır. Callback lexical çevresindeki q binding’ine closure ile erişebilir; bu binding’in captured olması input’u trusted yapmaz. Scene’de JS/body parse/DOM update local’dir; function çağrısı ayrı network paketi gibi çizilmez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Entry kaybı
- Control’leri oku
q Tea & Bread, tag web/http ve readonly view cards form verisine katılıyor. Disabled draft, isimsiz control ve işaretlenmeyen archived katılmıyor; submitter browse mode’u belirliyor.
- Control ve entry listesi
- Ordered entries / repeated tag / mode browse
- Dönüşüm ve policy
- Henüz değerlendirilmedi
- İşlem sonucu
- Henüz değerlendirilmedi
- Tek key kaybını gör
Tag entry’lerini tek key’li object’e indirmek iki değerden birini kaybettirebilir. Receiver’ın hangi representation’ı kabul ettiği açık olmalı; readonly view da trusted identity değildir.
- Control ve entry listesi
- Ordered entries / repeated tag / mode browse
- Dönüşüm ve policy
- Repeated tag must remain ordered
- İşlem sonucu
- Henüz değerlendirilmedi
- Başlık ayıracı değil
Tea & Bread içindeki ampersand başlığın parçası. URL serializer %26 ve space için + kullanıyor; encoded query’yi elle bölmek normal başlığın anlamını değiştirebilir.
- Control ve entry listesi
- Ordered entries / repeated tag / mode browse
- Dönüşüm ve policy
- Repeated tag must remain ordered
- İşlem sonucu
- q=Tea+%26+Bread / decoded Tea & Bread
- String ile number
rawPage string 2 iken + 1 sonucu string 21. Açık Number dönüşümü 3 verir. Bu yerel hesap farkı server limit veya izin kuralını browser görünümünden türetmememiz gerektiğini gösteriyor.
- Control ve entry listesi
- String 21 / explicit number 3
- Dönüşüm ve policy
- Repeated tag must remain ordered
- İşlem sonucu
- q=Tea+%26+Bread / decoded Tea & Bread
- Server kuralını koru
Server string query ve queryMax 40 sözleşmesini uygular; kullanıcı veya tenant bağını kendi güvenilir context’inden almalıdır. Client readonly veya closure bu context’i oluşturmaz.
- Control ve entry listesi
- String 21 / explicit number 3
- Dönüşüm ve policy
- Type/size/meaning / independent server authority
- İşlem sonucu
- q=Tea+%26+Bread / decoded Tea & Bread
- Veri anlamını koru
Entry sırası, repeated field, submitter ve dönüşüm açık kalınca normal arama aynı anlamı taşır. Bu veri doğruluğu server permission ile eşitlenmez; iki sonuç ayrı doğrulanır.
- Control ve entry listesi
- String 21 / explicit number 3
- Dönüşüm ve policy
- Type/size/meaning / independent server authority
- İşlem sonucu
- Data preserved / server permission separate
Yerel iptal
- Constraint engeli
Constraint-denied satırında constraintValid false ve network false. Normal submit yolundaki local feedback, server’ın request’i aldığı veya reddettiği anlamına gelmiyor.
- Control ve entry listesi
- Constraint false / network false
- Dönüşüm ve policy
- Henüz değerlendirilmedi
- İşlem sonucu
- Henüz değerlendirilmedi
- Listener iptali
Listener-cancel constraint’i geçiyor, fakat listenerCancel true ve manualFetch false. Default navigation iptal edildiği için network yine false; validation ile event kararı ayrı.
- Control ve entry listesi
- Constraint false / network false
- Dönüşüm ve policy
- Listener cancelled / no manual fetch
- İşlem sonucu
- Henüz değerlendirilmedi
- Olmayan server sonucu
İki local branch’te server response veya query validation başarısı yazılamaz. UI’nın aynı kalması server mutation’ın reddedildiği kanıtı değil; request hiç oluşmamıştır.
- Control ve entry listesi
- Constraint false / network false
- Dönüşüm ve policy
- Listener cancelled / no manual fetch
- İşlem sonucu
- No request / no server validation evidence
- Fetch handler farkı
Fetch-handler default navigation’ı iptal eder, fakat manualFetch true ile network oluşturur. cancel edilmiş event her koşulda ağsız akış demek değildir; handler’ın sonraki işi gerekir.
- Control ve entry listesi
- Cancelled default / explicit fetch true
- Dönüşüm ve policy
- Listener cancelled / no manual fetch
- İşlem sonucu
- No request / no server validation evidence
- Response’u doğru bağla
Navigation HTML’i yeni document yoluna, fetch JSON’u handler’ın body ve textContent yoluna gider. Headers’ın gelmesi DOM update’in tamamlandığını göstermez; Tea & Bread text olarak korunur.
- Control ve entry listesi
- Cancelled default / explicit fetch true
- Dönüşüm ve policy
- Navigation HTML ≠ fetch handler DOM
- İşlem sonucu
- No request / no server validation evidence
- Yerel ve remote sonucu ayır
Cancellation, request, body ve UI binding farklı aşamalardır. Closure’ın Book: Tea & Bread üretmesi normal yerel function sonucudur; async response correlation veya server grant’i kanıtlamaz.
- Control ve entry listesi
- Cancelled default / explicit fetch true
- Dönüşüm ve policy
- Navigation HTML ≠ fetch handler DOM
- İşlem sonucu
- Local computation ≠ response authority
VARSAYIM · SINIR · KONTROL
Client state’i server authority sanmak
Form q alanının required olması yalnız seçilmiş browser’ın normal submit yolunda boş değer için UI feedback sağlar. Readonly veya hidden alanın görünümü, server’ın bu değeri subject/tenant olarak kabul etmesini haklı çıkarmaz. Güven sınırı request receiver’da bulunur: entry string’i decode edilir, tür/boyut/iş anlamı ve server-owned identity bağlamı değerlendirilir. Bu derste Red lens gerçek form üzerinde değişiklik denemesi üretmez; trusted context ile taşınmış UI değeri arasında hangi varsayımın bozulabileceğini contract’tan çıkarır. Native ve fetch branch’ları aynı server kuralını kullanmalıdır.
Bir local dönüşüm sessiz veri kaybı yaratabilir
Repeated tag entry’lerini single-key object’e indirgemek, submitter’ın mode değerini unutmak veya + işaretini yanlış çözmek ordinary request’in anlamını değiştirir. Tea & Bread’daki ampersand başlığın parçasıdır; URL serializer onu field separator gibi bırakmaz. String "2" ile number 2’yi bilinçsizce eşitlemek de limit veya UI hesaplarını şaşırtabilir. Closure kullanıldığı için son response’un doğru aramaya ait olduğu otomatik söylenemez: async reply order ve correlation ayrıca tasarlanır. Client validation denied veya listener cancel branch’ında server kartının değişmemesi beklenir; olmayan request’i başarılı server validation diye sayamayız.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Entry roundtrip
- Ordered girdileri seç
Form defteri authored controls, entries ve branch koşullarını sağlar; URLSearchParams yerel encoding sonucunu üretir. Gerçek Browser gözleminde submitter/constraint/submit event’ini browser, q tür/boyut ve read kararını server, response parse ve textContent sonucunu client handler üretir. Yerel iptal dallarında server producer’a ulaşılmış değildir. Entries q, iki tag, view ve mode’u sırayla taşır. Bu text-only profile’da file/multipart davranışı yok; inventory ve seçilen submitter normal arama için yeterli dar veri kümesini tanımlar.
- Form ledger
- q / tag web / tag http / view / mode
- Contract review
- Henüz değerlendirilmedi
- Regression sonucu
- Henüz değerlendirilmedi
- Encoding kontrolü
Encoded representation URLSearchParams ile karşılaştırılıyor. Decode sonunda Tea & Bread ve ordered web/http tag listesi geri gelmeli; separator ile veri birbirine karışmamalı.
- Form ledger
- q / tag web / tag http / view / mode
- Contract review
- Roundtrip q + both tags + mode
- Regression sonucu
- Henüz değerlendirilmedi
- Yerel tür kontrolü
String 21 ile number 3 ayrı beklenen sonuçlar. const object’in title’ı Bread & Tea olarak güncellenebilir; const binding, object verisinin değişmez veya güvenilir olduğunu söylemez.
- Form ledger
- q / tag web / tag http / view / mode
- Contract review
- Roundtrip q + both tags + mode
- Regression sonucu
- Coercion/mutation expectations separate
- İki response yolu
Native HTML Tea & Bread taşır; fetch JSON title Tea & Bread’dır. HTML parser ile textContent aynı interpreter değildir; kullanılacak output context response representation’dan ayrı seçilir.
- Form ledger
- HTML escaped / JSON string / text binding
- Contract review
- Roundtrip q + both tags + mode
- Regression sonucu
- Coercion/mutation expectations separate
- Dört branch’i karşılaştır
Normal navigation ve fetch-handler network true; constraint-denied ve listener-cancel network false. İkinci çiftte server kartı değişmez, fakat bu server’ın request’i reddettiği iddiası değildir.
- Form ledger
- HTML escaped / JSON string / text binding
- Contract review
- Two network branches / two local stops
- Regression sonucu
- Coercion/mutation expectations separate
- Dar kanıtı bildir
Yerel veri, encoding ve function sonuçları hesaplanabilir. Browser control inclusion, submit event, navigation ve DOM update için ayrı gözlem gerekir; Node sonucu bu aşamaların kanıtını devralmaz.
- Form ledger
- HTML escaped / JSON string / text binding
- Contract review
- Two network branches / two local stops
- Regression sonucu
- Native data known / browser stages separate
Handler boşluğu
- Başlık tek gözlem
Form defteri authored controls, entries ve branch koşullarını sağlar; URLSearchParams yerel encoding sonucunu üretir. Gerçek Browser gözleminde submitter/constraint/submit event’ini browser, q tür/boyut ve read kararını server, response parse ve textContent sonucunu client handler üretir. Yerel iptal dallarında server producer’a ulaşılmış değildir. İnceleme yalnız Tea & Bread başlığını görüyor; navigation mı fetch handler mı çalıştı bilinmiyor. Aynı text iki farklı response ve UI yolundan gelebilir.
- Form ledger
- Title known / response path missing
- Contract review
- Henüz değerlendirilmedi
- Regression sonucu
- Henüz değerlendirilmedi
- Görünümü yetki sayma
Readonly control veya doğru heading server subject/tenant bağını göstermez. Server response ve handler body kaydı olmadan UI text’i başarılı remote validation diye adlandıramıyoruz.
- Form ledger
- Title known / response path missing
- Contract review
- Visible title ≠ server context evidence
- Regression sonucu
- Henüz değerlendirilmedi
- Aşamayı belirsiz tut
Bu gözlem için submit mode, request receipt ve body completion UNKNOWN kalıyor. Normal entry listesi beklenen örnektir; eksik handler kaydının yerine yapıştırılmaz.
- Form ledger
- Title known / response path missing
- Contract review
- Visible title ≠ server context evidence
- Regression sonucu
- Mode/receipt/body completion UNKNOWN
- Gerekli correlation
Seçilen submitter, entry listesi, cancellation ve manualFetch kararı aynı işe bağlanmalı. Response status/body ile UI update kaydı sonraki aşamayı ayrı yanıtlar.
- Form ledger
- Needed: submitter/entries/branch/response
- Contract review
- Visible title ≠ server context evidence
- Regression sonucu
- Mode/receipt/body completion UNKNOWN
- Closure sonucunu sınırla
Book: Tea & Bread closure sonucu ve inner/outer scope örnekleri yerel JavaScript davranışını açıklar. Bu sonuçlar event sırasını veya response’un doğru request’e bağlandığını kendiliğinden kanıtlamaz.
- Form ledger
- Needed: submitter/entries/branch/response
- Contract review
- Local function result / correlation separate
- Regression sonucu
- Mode/receipt/body completion UNKNOWN
- Yeni incelemenin sınırı
Yeni kayıt normal navigation, fetch ve yerel iptal kontrollerini ayrı doğrulamalı. Bu eksik olay için doğru başlığın görülmesi dışında remote başarı iddiası eklenmiyor.
- Form ledger
- Needed: submitter/entries/branch/response
- Contract review
- Local function result / correlation separate
- Regression sonucu
- Retain title / collect scoped branch evidence
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Entry, conversion ve policy için açık contract
Form defteri authored controls, entries ve branch koşullarını sağlar; URLSearchParams yerel encoding sonucunu üretir. Gerçek Browser gözleminde submitter/constraint/submit event’ini browser, q tür/boyut ve read kararını server, response parse ve textContent sonucunu client handler üretir. Yerel iptal dallarında server producer’a ulaşılmış değildir. Form control inventory’si name/type/checked/disabled/readonly ve submitter etkisini belirtir; repeated field’lar entry list olarak korunur. Seçilmiş GET profile q/tag/mode’u URLSearchParams ile encode eder; decoding sonunda aynı string ve ordered tags geri gelmelidir. File veya multipart sınırları ayrı contract’tır ve bu text-only fixture onlara davranış atfetmez. Normalize fonksiyonu raw string’den ayrı çıktı verir; Number dönüşümü, finite/domain kontrolü ve string output farklı işlemlerdir. Server subject/tenant’ı kendi trusted bağından alır; form alanı bu bağı oluşturmaz.
Local DOM outcome’u response receipt’inden ayır
Native navigation response’u yeni document parser yoluna, fetch response’u handler’ın body okuma ve UI update yoluna gider. Headers/status’ın gelmesi body parse veya DOM update’in tamamlanması değildir. Fetch handler normal book title’ı ordinary h2.textContent ile yazar; HTML pre-escaping bu setter için gerekmez. Function/scope örnekleri Node’da plain data üstünde gerçekten hesaplanabilir, fakat Node’da closure testinin geçmesi submit event, constraint validation veya DOM parser’ın çalıştığı anlamına gelmez. Regression branch’ları normal native/fetch, invalid constraint ve listener cancel için wire/local decision sınırını ayrı kaydeder.
ŞİMDİ VAKAYA UYGULA
Readonly alan veya closure girdiyi güvenilir yapar mı?
Atlas arama formu Tea & Bread başlığını, iki tag değerini ve seçilen browse submitter’ını taşıyor. Browser navigation ile fetch handler aynı server kuralına tabi, fakat response’u farklı UI yollarında kullanıyor. Client validation veya listener cancellation request oluşmadan akışı durdurabilir.
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
Atlas form entry ve handler ledger
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"action": "https://atlas.example.org/books",
"method": "GET",
"encoding": "application/x-www-form-urlencoded",
"selectedSubmitter": "browse",
"textOnly": true,
"serverReadPermissionDeclared": true,
"actualDOM": false,
"actualSubmission": false
},
"controls": [
{
"name": "q",
"type": "text",
"value": "Tea & Bread",
"disabled": false,
"readonly": false
},
{
"name": "tag",
"type": "text",
"value": "web",
"disabled": false
},
{
"name": "tag",
"type": "text",
"value": "http",
"disabled": false
},
{
"name": "view",
"type": "text",
"value": "cards",
"readonly": true,
"disabled": false
},
{
"name": "draft",
"type": "text",
"value": "ignored",
"disabled": true
},
{
"name": "",
"type": "text",
"value": "unnamed",
"disabled": false
},
{
"name": "archived",
"type": "checkbox",
"value": "yes",
"checked": false,
"disabled": false
},
{
"name": "mode",
"type": "submit",
"value": "browse",
"id": "browse",
"disabled": false
},
{
"name": "mode",
"type": "submit",
"value": "print",
"id": "print",
"disabled": false
}
],
"entries": [
[
"q",
"Tea & Bread"
],
[
"tag",
"web"
],
[
"tag",
"http"
],
[
"view",
"cards"
],
[
"mode",
"browse"
]
],
"encoded": "q=Tea+%26+Bread&tag=web&tag=http&view=cards&mode=browse",
"server": {
"queryType": "string",
"queryMax": 40,
"responseTitle": "Tea & Bread",
"nativeHTML": "<h2>Tea & Bread</h2>",
"fetchJSON": {
"title": "Tea & Bread"
}
},
"branches": [
{
"case": "normal",
"constraintValid": true,
"listenerCancel": false,
"manualFetch": false,
"network": true,
"mode": "navigation"
},
{
"case": "fetch-handler",
"constraintValid": true,
"listenerCancel": true,
"manualFetch": true,
"network": true,
"mode": "fetch"
},
{
"case": "constraint-denied",
"constraintValid": false,
"listenerCancel": false,
"manualFetch": false,
"network": false,
"mode": "none"
},
{
"case": "listener-cancel",
"constraintValid": true,
"listenerCancel": true,
"manualFetch": false,
"network": false,
"mode": "none"
}
],
"jsFixtures": {
"rawPage": "2",
"stringPlusOne": "21",
"explicitNumberPlusOne": 3,
"objectTitle": "Tea & Bread",
"constObjectAfterUpdate": "Bread & Tea",
"closurePrefix": "Book: ",
"closureResult": "Book: Tea & Bread",
"blockOuter": "outer",
"blockInner": "inner"
},
"boundaries": {
"clientValidationGrantsServerPermission": false,
"readonlyIsTrustedIdentity": false,
"closureMakesInputTrusted": false,
"fetchEqualsNavigation": false
}
}- controls
- Sabit text-only control inventory; checkbox ve submitter inclusion açık.
- entries
- Ordered repeated tag entries korunur.
- encoded
- Normal title’ın UTF-8 form URL encoding representation’ı.
- branches
- Constraint/event/default navigation ile explicit fetch kararı ayrı.
- jsFixtures
- Finite native type/coercion/function/closure/scope sonuçları.
Original inert text-only form ledger; native Node plain data/URL encoding mümkün, actual browser control/event/FormData/navigation/DOM execution değil.
İki yanlış kanı
Readonly ve hidden alanlar trusted server değeridir.
Bu UI özellikleri permission veya identity kanıtı sağlamaz; server-owned context ayrıdır.
fetch form submission ile aynı navigation’dır.
Default submission cancel edilebilir; fetch ayrı request/body/handler/UI akışı izler.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Submit listener navigation’ı iptal ediyor, fakat manualFetch=true. Bu branch’te network=false sonucu çıkar mı?
- Hayır. Navigation iptal; network=true ve mode=fetch.
- Evet. preventDefault bütün olası request’leri yasaklar.
Gerekçeli cevabı oku
Hayır. Navigation iptal; network=true ve mode=fetch. — Listener’ın cancellation sonucu varsayılan navigation’ı durdurur. Ayrı manual fetch yine request üretebilir; fetch navigation ile aynı akış değildir.
Readonly view neden entries içinde, disabled draft ve unchecked archived neden dışında?
Dersten seçilen artifact alanları; öğretim örneği
- controls[3]
- {"name":"view","type":"text","value":"cards","readonly":true,"disabled":false}
- controls[4]
- {"name":"draft","type":"text","value":"ignored","disabled":true}
- controls[6]
- {"name":"archived","type":"checkbox","value":"yes","checked":false,"disabled":false}
- entries
- [["q","Tea & Bread"],["tag","web"],["tag","http"],["view","cards"],["mode","browse"]]
- Readonly hiçbir zaman gönderilmez; bütün checkbox’lar her zaman gönderilir.
- Readonly edit’i sınırlar; disabled ve unchecked alanlar bu entry listesine girmez.
Gerekçeli cevabı oku
Readonly edit’i sınırlar; disabled ve unchecked alanlar bu entry listesine girmez. — view=cards gönderilebilir. draft disabled olduğu, archived ise unchecked olduğu için dışarıda kalır. Bu koşullar server input’unu güvenilen kimlik yapmaz.
rawPage="2" için stringPlusOne="21", explicitNumberPlusOne=3. Bu farkı ve client validation’ın server permission vermemesini açıkla.
Gerekçeli cevabı oku
Form’dan gelen "2" string’dir; string ile + işlemi concatenation üretebilir. Açık number dönüşümü sonrasında 2+1=3 hesaplanır. Client validation submission’ı sınırlandırabilir, fakat server type/range ve permission kontrollerini ayrıca yapmalıdır. Readonly veya closure içinde taşınmak input’u güvenilen hale getirmez. Bu örnek yalnız public book araması için verilen alanları açıklar; gerçek submission çalıştırmaz.
□ String concatenation ile numeric addition’ı ayırdım.
□ Client validation veya readonly flag’inden server izni çıkarmadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- WHATWG HTML — Form control infrastructure§4.10.19.1 name; §4.10.19.5 disabled; §4.10.21.4 security · §4.10.22.3 submission algorithm; §4.10.22.4 entry list; §4.10.22.7 URL encoding
- MDN — HTMLFormElement requestSubmitParameters: submitter/overrides; Usage notes: validation/event versus submit()
- MDN — JavaScript Grammar and typesVariable scope; Constants; Data structures and types; Data type conversion
- MDN — JavaScript FunctionsDefining/calling functions; Function scopes and closures
- WHATWG DOM — textContent§4.4 get/set text content; string replace all creates Text node
- MDN — Using Fetch: response and body stagesHandling the response; Checking response status; Reading the response body