WEB / WEB-06.03
URL resolution
Aynı relative reference’ın farklı base’lerde nasıl farklı URL’ye dönüştüğünü izle; parsing başarısını resource yüklenmesiyle karıştırma.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Current directory
- Reference seçildi
Bir link metni var; absolute sonuç henüz yok.
- Reference
- notes
- Local resolver
- Base: pending
- Application sonucu
- Destination: absent
- Base context hazır
Bu işlem declared base string’ini kullanır; Document yaratılmaz.
- Reference
- notes
- Local resolver
- https://books.example/catalog/lesson.html?lang=tr#old
- Application sonucu
- Destination: absent
- Resolution uygulanır
Base’in current directory’si /catalog/ olduğundan notes son segment’in yerine geçer ve /catalog/notes üretilir. Query ve eski fragment bu path reference’ıyla taşınmaz.
- Reference
- notes
- Local resolver
- https://books.example/catalog/notes
- Application sonucu
- Destination: pending consumption
- Final URL ayrı sonuçtur
Application normalized URL adayını alır; network henüz başlamadı.
- Reference
- notes
- Local resolver
- Parse: success
- Application sonucu
- https://books.example/catalog/notes
- İşlem sınırı görünür
Adres çözülmesi resource yüklenmesi veya izin kararı değildir.
- Reference
- notes
- Local resolver
- Local calculation complete
- Application sonucu
- Fetch: not started
Trailing slash
- Reference seçildi
Bir link metni var; absolute sonuç henüz yok.
- Reference
- notes
- Local resolver
- Base: pending
- Application sonucu
- Destination: absent
- Base context hazır
Bu işlem declared base string’ini kullanır; Document yaratılmaz.
- Reference
- notes
- Local resolver
- https://books.example/catalog/lesson/
- Application sonucu
- Destination: absent
- Resolution uygulanır
Base trailing slash içerir; current directory /catalog/lesson/ olur. notes bu directory’ye eklenip /catalog/lesson/notes üretir; dosya sistemi kontrol edilmez.
- Reference
- notes
- Local resolver
- https://books.example/catalog/lesson/notes
- Application sonucu
- Destination: pending consumption
- Final URL ayrı sonuçtur
Application normalized URL adayını alır; network henüz başlamadı.
- Reference
- notes
- Local resolver
- Parse: success
- Application sonucu
- https://books.example/catalog/lesson/notes
- İşlem sınırı görünür
Adres çözülmesi resource yüklenmesi veya izin kararı değildir.
- Reference
- notes
- Local resolver
- Local calculation complete
- Application sonucu
- Fetch: not started
Query-only
- Reference seçildi
Bir link metni var; absolute sonuç henüz yok.
- Reference
- ?lang=en
- Local resolver
- Base: pending
- Application sonucu
- Destination: absent
- Base context hazır
Bu işlem declared base string’ini kullanır; Document yaratılmaz.
- Reference
- ?lang=en
- Local resolver
- https://books.example/catalog/lesson.html?lang=tr#old
- Application sonucu
- Destination: absent
- Resolution uygulanır
?lang=en base’in scheme, authority ve path’ini korur; query’yi değiştirir ve eski #old fragment’ını kaldırır. Sonuç /catalog/lesson.html?lang=en olur.
- Reference
- ?lang=en
- Local resolver
- https://books.example/catalog/lesson.html?lang=en
- Application sonucu
- Destination: pending consumption
- Final URL ayrı sonuçtur
Application normalized URL adayını alır; network henüz başlamadı.
- Reference
- ?lang=en
- Local resolver
- Parse: success
- Application sonucu
- https://books.example/catalog/lesson.html?lang=en
- İşlem sınırı görünür
Adres çözülmesi resource yüklenmesi veya izin kararı değildir.
- Reference
- ?lang=en
- Local resolver
- Local calculation complete
- Application sonucu
- Fetch: not started
Invalid base
- Reference hazır
notes reference’ı absolute context bekler.
- Reference
- notes
- Local resolver
- Base: pending
- Application sonucu
- Destination: absent
- Base invalid
not an absolute base bu constructor için geçerli base değildir.
- Reference
- notes
- Local resolver
- Base: invalid
- Application sonucu
- Destination: absent
- TypeError oluşur
Failure parsing aşamasındadır; DNS/TLS/HTTP başlamadı.
- Reference
- notes
- Local resolver
- TypeError
- Application sonucu
- Destination: absent
- Failure sonucu korunur
Eski başarılı URL bu işlemin sonucu yapılmaz.
- Reference
- notes
- Local resolver
- Parse: failure
- Application sonucu
- Destination: null; fetch: false
ROLLER · STATE · VERİ AKIŞI
Resolution için iki input gerekir
Duru’nun katalog sayfasındaki notes link’i tek başına bir absolute adres değildir. Sonuç reference ve base URL’nin birlikte işlenmesinden doğar. Base https://books.example/catalog/lesson.html?lang=tr#old ise notes, https://books.example/catalog/notes olarak çözülür.
Bu hesap DNS resolution’dan farklıdır. URL resolution bir reference’ı absolute URL’ye dönüştüren local parsing işlemidir; DNS adını IP’ye çevirmemiş, server’a bağlanmamış ve notes kaydını okumamıştır. “Resolved” observation’ı ile “resource loaded” observation’ını aynı sayma.
Sahne reference’ı, seçilen base’i ve sonucu üç ayrı actor’da gösterir. Actor’lar ayrı network service değildir; local kararın input, parser ve application tüketimi rolleridir. Bu nedenle adımlar wire packet üretmez.
Son slash current directory’yi değiştirir
Base /catalog/lesson.html ile /catalog/lesson/ aynı current directory’yi sağlamaz. İlki için last slash /catalog/ sonunda olduğundan notes /catalog/notes olur. İkincisinde trailing slash korunur ve notes /catalog/lesson/notes olur.
Parser lesson.html’in gerçekten dosya olup olmadığını bilmez. Son segment’in uzantısı değil, hierarchical path yapısı ve trailing slash current-directory hesabını belirler. notes ve ./notes bu örneklerde aynı current-directory reference sınıfındadır.
String concatenation bu hesabı yanlış yapabilir: base’in query/fragment’ını da sona taşımak veya son segment’i directory sanmak başka bir adres üretir. Artifact file-like ve directory-like base’leri aynı reference ile karşılaştırır; doğru sonuç native URL constructor’ından alınır.
Root ve parent reference’ları izle
/notes root-relative reference’tır. Base’in origin context’ini kullanır, path directory’sini kullanmaz: /catalog/lesson.html veya /catalog/lesson/ base’leriyle sonuç https://books.example/notes olur. Buradaki root, server diskindeki root directory anlamına gelmez.
../notes, current directory’nin parent seviyesine gider. Base /catalog/lesson.html olduğunda current directory /catalog/ olduğu için /notes elde edilir. Base /catalog/lesson/ olduğunda current directory /catalog/lesson/ olur; parent /catalog/notes’tır.
Bu normal link hesabında . ve .. segments URL path processing’in parçasıdır; server filesystem access’i çalıştırılmaz. Artifact yalnız benign katalog link’lerini hesaplar. Resolution sonucunun hangi route’a karşılık geldiği application’ın ayrı sorumluluğudur.
Query-only ve fragment-only aynı işlemi yapmaz
?lang=en yeni query’yi seçerken base’in scheme/authority/path’ini korur. Base’teki #old fragment’ı yeni reference taşımadığı için korunmaz. Sonuç https://books.example/catalog/lesson.html?lang=en olur.
#new ise path ve mevcut query’yi koruyup fragment’ı değiştirir: https://books.example/catalog/lesson.html?lang=tr#new. Fragment’ın normal resource request target’ına gitmediğini önceki dersle birlikte yorumla; resolution’ın kendisi yine hiçbir request göndermez.
Tam absolute https://library.example.org/notes reference’ı geçerli base’in host/path context’inden bağımsız hedef seçer. Böyle bir sonuç syntactically valid olabilir; application’ın uygun destination policy’sinden geçtiği ayrıca belirlenir. “Relative link içinde bizim sayfamızdaydı” gözlemi final destination’ı tarif etmez.
Document base’i ve failure sınırı
HTML Document’ın base URL’si çoğunlukla document context’inden gelir; href taşıyan ilk base element varsa standardın frozen base URL kuralı devreye girer. document.baseURI ile address bar’ın metninin her durumda aynı olduğunu varsayma. about:blank/srcdoc gibi context’lerin fallback kuralları da vardır.
Örnekte Document oluşturulmaz; verilen HTTPS base string’i new URL(reference, base) ile işlenir. Bu sonuç HTML base inheritance veya navigation’ın gerçekleştiğini göstermez. Kaynakta browser kuralları, artifact’te ise local URL API’sinin çıktıları bulunur; ikisini aynı gözlem sanma.
Base invalid ise constructor TypeError üretir. Başarısız branch’te eski başarılı destination’ı yeni işlem başarılıymış gibi gösterme; candidate yok ve fetch başlamadı durumlarını koru. Bir valid base seçerek tekrar denemek yeni bir hesaplamadır; failure geçmişini değiştirmez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Base context
- Reference base ile birlikte seçildi
notes reference’ı lesson.html base’inde /catalog/notes, /catalog/lesson/ base’inde /catalog/lesson/notes seçer. Aynı reference başka effective base’te farklıdır.
- Reference/base evidence
- notes / trailing-slash base
- URL construction gate
- Candidate yok
- Network/access conclusion
- Network outcome yok
- Parser gate sonucu üretildi
trailing-slash expectedHref=https://books.example/catalog/lesson/notes’tur. Bu parser sonucu hangi resource’un server’da var olduğunu göstermez.
- Reference/base evidence
- notes / trailing-slash base
- URL construction gate
- https://books.example/catalog/lesson/notes
- Network/access conclusion
- Network outcome yok
- Yanlış network conclusion’ı durdu
Candidate varlığı request gönderimi, response receipt veya exposure değildir. Resolved structured URL application destination policy’sinde ayrıca değerlendirilir.
- Reference/base evidence
- notes / trailing-slash base
- URL construction gate
- https://books.example/catalog/lesson/notes
- Network/access conclusion
- Candidate only / delivery unknown
- Query ve fragment etkisi ayrıldı
?lang=en reference’ı query’yi değiştirir ve eski fragment’ı kaldırır; #new query lang=tr’yi korur. Final URL component farkı server locale davranışı ölçümü değildir.
- Reference/base evidence
- Query changes / fragment retains query
- URL construction gate
- https://books.example/catalog/lesson/notes
- Network/access conclusion
- Candidate only / delivery unknown
- Root ve parent context’e bağlı
/notes root reference’ı origin root’a gider; ../notes lesson.html base’inden root’a, trailing directory base’inden /catalog/notes’a gider. Bunlar local resolution kurallarıdır, filesystem path erişimi değildir.
- Reference/base evidence
- Query changes / fragment retains query
- URL construction gate
- Root / parent require selected base
- Network/access conclusion
- Candidate only / delivery unknown
- Gate kapanışı veya candidate scope’u korundu
Resolved href seçilmiş base context’iyle uyumludur. Link hesabından aynı-origin policy veya resource authorization sonucu çıkarılmaz.
- Reference/base evidence
- Query changes / fragment retains query
- URL construction gate
- Root / parent require selected base
- Network/access conclusion
- Resolved candidate / access unknown
Invalid base
- Reference base ile birlikte seçildi
notes relative reference’ı not an absolute base metniyle verilmiştir. Reference tek başına destination üretmez; caller’ın seçtiği context tamamlanmış olmalıdır.
- Reference/base evidence
- notes / invalid base
- URL construction gate
- Candidate yok
- Network/access conclusion
- Network outcome yok
- Parser gate sonucu üretildi
Geçersiz base için URL construction TypeError üretir. Destination null kalır ve fetch başlamaz. Önceki başarılı case’in href’i bu failure branch’ine candidate olarak taşınmaz.
- Reference/base evidence
- notes / invalid base
- URL construction gate
- TypeError / candidate=null
- Network/access conclusion
- Network outcome yok
- Yanlış network conclusion’ı durdu
TypeError, local URL construction işleminin başarısız olduğunu gösterir; HTTP 404 veya transport timeout değildir. Destination üretilemediği için bu case’te browser’ın request gönderdiği sonucu çıkarılmaz.
- Reference/base evidence
- notes / invalid base
- URL construction gate
- TypeError / candidate=null
- Network/access conclusion
- No candidate / no fetch
- Hata aynı input pair’ine bağlı
Reference notes ve base not an absolute base aynı işlem kaydında tutulur. Başka case’in geçerli base’ini bu kayda eklemek hatayı açıklamaz; başarısız construction’ın girdisini değiştirmiş olur.
- Reference/base evidence
- notes / invalid base kaydı
- URL construction gate
- TypeError / candidate=null
- Network/access conclusion
- No candidate / no fetch
- Candidate boşluğu korundu
Parser failure sonucu TypeError ve candidate=null olarak kalır. Önceki başarılı href’i yeniden kullanmak yerine construction error caller’a bildirilir; bu branch yeni destination veya request oluşturmaz.
- Reference/base evidence
- notes / invalid base kaydı
- URL construction gate
- TypeError / candidate=null
- Network/access conclusion
- No candidate / no fetch
- Gate kapanışı veya candidate scope’u korundu
Invalid base local gate’te durur ve stale href yoktur. Hata nedenini network katmanına veya server policy’sine taşımadan doğru ek gözlem seçilir: reference/base/parser error.
- Reference/base evidence
- notes / invalid base kaydı
- URL construction gate
- TypeError / candidate=null
- Network/access conclusion
- Local TypeError / fetch not started
VARSAYIM · SINIR · KONTROL
Final URL hangi context’ten geldi?
Link incelemesinde reference’ı tek başına raporlamak eksiktir. notes metni iki farklı base’te iki farklı pathname seçebilir. Reference, declared/effective base ve normalized final URL üçlüsünü birlikte kaydet.
Bu artifact’ta trailing-slash branch’ini karşılaştır. Sonucun farklılaşması parser’ın tutarsız olduğu anlamına gelmez; context değişmiştir. Actual fetch veya server response ölçmeden adres hesabından resource exposure sonucu çıkarma.
Query-only ve fragment-only case’lerini karşılaştır: ?lang=en query’yi değiştirip eski fragment’ı kaldırır; #new ise mevcut lang=tr query’sini korur. İki final URL’nin hangi component’te ayrıldığını açıklamak, “link değişti” demekten daha güçlü bir mekanizma kanıtıdır. Burada server locale davranışı henüz ölçülmedi.
Local failure’ı network failure diye yazma
Invalid base TypeError’ı transport timeout veya HTTP404 değildir. Hangi aşamanın tamamlanmadığını belirt: parsing sonucu yoksa request construction için destination yoktur.
Same-site/same-origin veya application destination kontrolü yapılacaksa resolved structured URL üzerinden yapılır. Reference metninin tek başına bu boundary’yi ölçtüğünü varsayma; URL resolution da authorization kararı değildir.
Başarısız branch’in destination alanı null kalır. Önceki bir successful case’in href değerini buraya taşımak, hiç üretilmemiş bir sonucu mevcutmuş gibi gösterir. Review sırasında error type, selected base ve candidate varlığı aynı işlem kaydına ait olmalıdır; farklı case’lerin gözlemlerini birleştirme.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Base değişimi
- İşlem kaydında iki input var
Her comparison reference ve base’i beraber tutar. current-directory notes, base=https://books.example/catalog/lesson.html?lang=tr#old için /catalog/notes verir.
- Resolution input evidence
- Reference + base same operation
- URL comparison
- URL calculation yok
- Observation boundary
- Evidence scope yok
- Trailing slash sonucu karşılaştırıldı
Base https://books.example/catalog/lesson/ ise aynı notes /catalog/lesson/notes verir. Fark parser inconsistency değil base context değişimidir; manual string concatenation gereksinimi değildir.
- Resolution input evidence
- Reference + base same operation
- URL comparison
- lesson.html → /catalog/notes; lesson/ → /catalog/lesson/notes
- Observation boundary
- Evidence scope yok
- Root ve parent aynı base’le karşılaştırılır
/notes origin root’unda çözülür. ../notes, lesson.html base’inden /notes; lesson/ base’inden /catalog/notes üretir. Bunlar farklı row’lardır: reference ve base birlikte tutulduğu için hangi directory kuralının sonucu değiştirdiği görülebilir.
- Resolution input evidence
- Reference /notes veya ../notes; base ayrı
- URL comparison
- Root /notes; parent base’e bağlı
- Observation boundary
- Local URL sonucu; filesystem yok
- Absolute reference başka authority seçebilir
absolute reference=https://library.example.org/notes base’i kendi URL’siyle değiştirir. Parser sonucu origin değişimini gösterebilir, fakat application’ın o destination’a allow verdiğini ölçmez.
- Resolution input evidence
- Ayrı absolute reference karşılaştırması
- URL comparison
- https://library.example.org/notes
- Observation boundary
- Evidence scope yok
- Kaydın üreticisi ve girdileri eşleşir
Href çıktısının üreticisi local URL API’dir. Reference, base ve beklenen sonucu aynı operation’a bağla; başka bir base’in başarılı href’ini buraya kopyalama. Document base inheritance veya navigation gözlemi için gerçek Document gerekir.
- Resolution input evidence
- Reference + base + output birlikte
- URL comparison
- Üretici local URL API
- Observation boundary
- Coverage declared-string resolution
- Base değişimi sonucu açıklar
notes reference’ının iki base’te farklı path vermesi context farkının sonucudur. URL resolution kaydı DNS, HTTP receipt veya resource authorization sonucu değildir. Bu diğer soruların her biri kendi üreticisinden kanıt ister.
- Resolution input evidence
- notes / iki ayrı base context’i
- URL comparison
- lesson.html → /catalog/notes; lesson/ → /catalog/lesson/notes
- Observation boundary
- Resolution biliniyor; network bilinmiyor
Query / fragment
- İki reference aynı base’e bağlandı
Base https://books.example/catalog/lesson.html?lang=tr#old olarak verilir. ?lang=en ve #new iki ayrı input’tur; sonuçların karşılaştırılması için base değişmeden kalır. Bu aşamada URL hesabı dışında bir request yoktur.
- Resolution input evidence
- Aynı base; ?lang=en / #new
- URL comparison
- Component sonuçları bekliyor
- Observation boundary
- Network observation yok
- Query-only path’i korur
?lang=en, scheme/authority ve /catalog/lesson.html path’ini korur. Yeni query lang=en olur, eski #old kaldırılır. expectedHref=https://books.example/catalog/lesson.html?lang=en bu row’un sonucudur.
- Resolution input evidence
- Reference ?lang=en
- URL comparison
- Path aynı; query en; hash yok
- Observation boundary
- Server locale sonucu yok
- Fragment-only mevcut query’yi korur
Ayrı #new row’u aynı base’teki path ve lang=tr query’sini korur; fragment new olur. Sonuç https://books.example/catalog/lesson.html?lang=tr#new’dur. Query-only row’undan lang=en buraya taşınmaz.
- Resolution input evidence
- Reference #new; aynı base
- URL comparison
- Path aynı; query tr; hash #new
- Observation boundary
- DOM navigation ölçülmedi
- Request-target ile fragment farklıdır
Bu ikinci final URL’den normal HTTP path/query adayı /catalog/lesson.html?lang=tr olur. #new client component’i olarak ayrı kalır. Bu türetme request göndermez ve fragment’ın UI’da scroll oluşturduğunu göstermez.
- Resolution input evidence
- Path/query adayı; #new ayrı
- URL comparison
- Query tr korunur; fragment target’ta yok
- Observation boundary
- HTTP ve scroll gözlenmedi
- Component kanıtının üreticisi parser’dır
Href, search ve hash çıktıları local URL API’den gelir. Gerçek Document/baseURI, browser fragment handling veya server locale davranışı başka üreticilerin sonucudur. Verilmiş base string’inden bu context’lerin çalıştığı çıkarılmaz.
- Resolution input evidence
- İki reference ve aynı base kaydedildi
- URL comparison
- Üretici URL API; Document yaratılmadı
- Observation boundary
- Coverage component resolution
- Sonuçlar başka row’dan doldurulmaz
Query-only ve fragment-only sonuçları kendi input’larına bağlı kalır. Invalid base karşılaştırması ise TypeError, destination=null ve fetchStarted=false verir. Hiçbir başarılı href, başarısız row’un destination alanını doldurmaz.
- Resolution input evidence
- Query en/hash yok; query tr/#new
- URL comparison
- Başarılı href ile TypeError ayrı row’lar
- Observation boundary
- Component sonucu var; network sonucu yok
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Base’i açık veri olarak ele al
Relative adres kullanan code’da base’in nereden geldiğini açık tut: configuration, Document context veya caller input. Aynı fixture set’i, base’in trailing slash’lı/slash’sız biçimi ve root/query/fragment reference’larıyla çalıştır.
new URL gibi standard API’yi kullan; manual concatenation ile parser’ın işini tekrar yazma. Normalized sonucu uygulamanın uygun destination gereksinimiyle değerlendir; başarısız parsing’de devam edecek eski result kullanma.
URL labında önce notes için iki base’in sonucunu yaz, sonra command output’unu karşılaştır. Eğer fark varsa reference’ı değiştirmeden base context’ini yeniden oku. Bu yöntem bug teşhisinde hangi input’un farklılaştığını ayırır; network retry veya server değişikliği gerektirmeyen local bir hesap hatası olabilir.
Kanıtı doğru aşamaya bağla
Bir resolution kaydının üreticisi URL parser’dır: aynı reference ve aynı base verilince elde edilen href veya error type karşılaştırılır. Document base’i öğrenmek için gerçek Document context’i, resource’un yüklenmesini öğrenmek için fetch/response gözlemi gerekir. Yerel parser sonucu bu diğer aşamaların kanıtı değildir.
Benign regression tablosunda reference, base, expected href ve error type bulunur. Değişen base seçimini ayrı case yap; failure branch’in UI’sinin candidate’sız kaldığını modelde doğrula. Sonuçları öğrencinin anlayabileceği adım metniyle koru; motion kapalıyken de aynı hesap görünür.
Örneğin notes, lesson.html base’inde /catalog/notes olurken lesson/ base’inde /catalog/lesson/notes olur. Query-only ve fragment-only sonuçlarını aynı base’e bağlayıp değişen component’i göster. Invalid base için TypeError ile destination=null birlikte tutulur. Başarılı adres hesabı, resource’un varlığını veya kullanıcının ona erişebildiğini söylemez.
ŞİMDİ VAKAYA UYGULA
Local candidate, parser error ve network outcome nasıl ayrı tutulur?
notes reference’ı, lesson.html ve lesson/ base’lerinde farklı path seçer. Invalid base durumunda TypeError oluşur ve destination null kalır. Bu local parsing sonucu, HTTP 404 veya network timeout değildir.
Vakadaki browser ve API’yi URL bileşenleriyle tanımla. Target, origin ve site aynı soru değildir; her birini hangi kararın kullandığını belirt.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Relative reference / base / result defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"cases": [
{
"case": "current-directory",
"reference": "notes",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://books.example/catalog/notes"
},
{
"case": "dot-current",
"reference": "./notes",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://books.example/catalog/notes"
},
{
"case": "trailing-slash",
"reference": "notes",
"base": "https://books.example/catalog/lesson/",
"expectedHref": "https://books.example/catalog/lesson/notes"
},
{
"case": "root",
"reference": "/notes",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://books.example/notes"
},
{
"case": "parent",
"reference": "../notes",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://books.example/notes"
},
{
"case": "parent-directory",
"reference": "../notes",
"base": "https://books.example/catalog/lesson/",
"expectedHref": "https://books.example/catalog/notes"
},
{
"case": "query",
"reference": "?lang=en",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://books.example/catalog/lesson.html?lang=en"
},
{
"case": "fragment",
"reference": "#new",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://books.example/catalog/lesson.html?lang=tr#new"
},
{
"case": "absolute",
"reference": "https://library.example.org/notes",
"base": "https://books.example/catalog/lesson.html?lang=tr#old",
"expectedHref": "https://library.example.org/notes"
}
],
"invalidBase": {
"reference": "notes",
"base": "not an absolute base",
"expectedError": "TypeError",
"destination": null,
"fetchStarted": false
},
"documentBaseModel": "Declared strings only; no Document/base element created",
"networkRequestsExecuted": 0
}- cases.reference
- Çözümlenecek normal link metni.
- cases.base
- Bu işlem için declared absolute context.
- cases.expectedHref
- Native URL constructor’ının doğrulanacak serialization’ı.
- invalidBase.destination
- Failure sonrası null; eski başarıya geri dönülmez.
Sentetik normal link girdileri native Node URL ile çözülür. Document base inheritance, browser navigation, DNS ve fetch çalıştırılmaz.
İki yanlış kanı
Relative resolution, base ile reference’ı birleştirmektir.
Path, trailing slash, query ve fragment kuralları component’leri ayrı dönüştürür. Standard parser kullan.
URL resolved ise DNS ve resource load başarılıdır.
Resolution local hesaplamadır; DNS, TLS, HTTP ve application sonucu ayrı ölçülür.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
notes reference’i, /catalog/lesson.html ve /catalog/lesson/ base’leriyle aynı URL’yi üretir mi?
- Hayır. /catalog/notes ve /catalog/lesson/notes olur.
- Evet. String’in sonuna notes eklemek yeterlidir.
Gerekçeli cevabı oku
Hayır. /catalog/notes ve /catalog/lesson/notes olur. — File-like base’in son segment’i değiştirilir. Trailing slash taşıyan base’de reference o directory içinde çözülür.
Query-only ve fragment-only reference’ler hangi bileşenleri farklı biçimde korur?
Dersten seçilen artifact alanları; öğretim örneği
- cases[6]
- {"case":"query","reference":"?lang=en","base":"https://books.example/catalog/lesson.html?lang=tr#old","expectedHref":"https://books.example/catalog/lesson.html?lang=en"}
- cases[7]
- {"case":"fragment","reference":"#new","base":"https://books.example/catalog/lesson.html?lang=tr#old","expectedHref":"https://books.example/catalog/lesson.html?lang=tr#new"}
- İkisi de path’i root’a sıfırlar.
- ?lang=en path’i korur, query’yi değiştirir ve eski hash’i kaldırır; #new query’yi korur.
Gerekçeli cevabı oku
?lang=en path’i korur, query’yi değiştirir ve eski hash’i kaldırır; #new query’yi korur. — expectedHref, iki resolution’ın farklı bileşenleri miras aldığını gösterir.
Geçersiz base için TypeError alınması neden network request hatası gözlemi değildir? Document base ile farkını da açıkla.
Gerekçeli cevabı oku
Geçersiz absolute base destination üretemez; fetchStarted=false. Bu yerel URL API hatası remote server response’u değildir. Örnek açıkça verilen base string’lerini kullanır; gerçek Document veya base element oluşturmaz. networkRequestsExecuted=0 olduğu için parse sonucundan reachability çıkarılamaz.
□ Yerel URL hatasını network hatasından ayırdım.
□ Explicit base string’i ile Document context’ini ayırdım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
MANUAL LAB
URL Boundary Lab
Component, origin/site ve relative resolution sonuçlarını önce tahmin et, sonra native API ile karşılaştır.
Tahmin → gözlem → açıklama workbook’unu aç ↗GitHub kaynakları ↗Kaynaklar ve kapsam
- WHATWG — URL StandardGoals · 4.1 URLs · 4.2 URL miscellaneous: default port · 4.4 URL parsing · 4.7 Origin · 6.1 URL class
- RFC 3986 — URI Generic Syntax1.1.3 URI, URL, and URN · 2.1 Percent-Encoding · 2.4 When to Encode or Decode · 3 Syntax Components · 5.2 Relative Resolution
- MDN — Resolving relative referencesCurrent directory relative · Parent-directory relative · Root relative
- MDN — URL constructorSyntax · Parameters · Exceptions
- WHATWG HTML — Parsing URLs and document base URLs2.4.2 Parsing URLs · 2.4.3 Document base URLs