Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Current directory

  1. Reference seçildi

    Bir link metni var; absolute sonuç henüz yok.

    Reference
    notes
    Local resolver
    Base: pending
    Application sonucu
    Destination: absent
  2. 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
  3. 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
  4. 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
  5. İş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

  1. Reference seçildi

    Bir link metni var; absolute sonuç henüz yok.

    Reference
    notes
    Local resolver
    Base: pending
    Application sonucu
    Destination: absent
  2. 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
  3. 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
  4. 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
  5. İş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

  1. Reference seçildi

    Bir link metni var; absolute sonuç henüz yok.

    Reference
    ?lang=en
    Local resolver
    Base: pending
    Application sonucu
    Destination: absent
  2. 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
  3. 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
  4. 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
  5. İş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

  1. Reference hazır

    notes reference’ı absolute context bekler.

    Reference
    notes
    Local resolver
    Base: pending
    Application sonucu
    Destination: absent
  2. 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
  3. TypeError oluşur

    Failure parsing aşamasındadır; DNS/TLS/HTTP başlamadı.

    Reference
    notes
    Local resolver
    TypeError
    Application sonucu
    Destination: absent
  4. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. İş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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. İ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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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?

  1. Hayır. /catalog/notes ve /catalog/lesson/notes olur.
  2. 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"}
  1. İkisi de path’i root’a sıfırlar.
  2. ?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