WEB / WEB-06.01
URL anatomy ve resource addressing
URL’yi component’lerine ayır; identifier, representation ve erişim kararını ayır. Native parser sonucunda query multiplicity, encoding ve fragment sınırını izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Absolute URL
- Metin henüz yorumlanmadı
Katalog adresi yalnız metindir; parser sonucu ve request yok.
- Adres metni
- Input: katalog URL
- Yerel URL parser
- Parser: pending
- Application görünümü
- Görünüm: pending
- Authority ayrılır
Scheme, hostname ve explicit port yerel olarak ayrıldı. DNS çalışmadı.
- Adres metni
- Input: unchanged
- Yerel URL parser
- https: / books.example / 8443
- Application görünümü
- Görünüm: pending
- Path/query/fragment ayrılır
Query iki tag değeri taşır; #summary fragment olarak kalır.
- Adres metni
- Input: unchanged
- Yerel URL parser
- /catalog/atlas; tags: network, web; #summary
- Application görünümü
- Görünüm: pending
- Request-target adayı hazırlanır
Path/query adayı fragment içermez. Bu hesap gerçek HTTP göndermez.
- Adres metni
- Input: unchanged
- Yerel URL parser
- Parser: success
- Application görünümü
- Target: /catalog/atlas?lang=tr&tag=network&tag=web
- Fragment client görünümünde kalır
Summary bölümü bir client seçimi adayıdır; network veya scrolling kanıtı yok.
- Adres metni
- Input: unchanged
- Yerel URL parser
- Parser: success
- Application görünümü
- Fragment: summary; network: not run
Base yok
- Relative reference var
/catalog/atlas tek başına host bilgisini taşımaz.
- Adres metni
- /catalog/atlas
- Yerel URL parser
- Base: absent
- Application görünümü
- Sonuç: pending
- Base olmadan constructor çağrılır
Native URL constructor relative input için base ister.
- Adres metni
- /catalog/atlas
- Yerel URL parser
- Parse: failure / TypeError
- Application görünümü
- Sonuç: pending
- Başarı sonucu üretilmez
Exception network failure değildir; geçerli absolute sonuç yoktur.
- Adres metni
- /catalog/atlas
- Yerel URL parser
- TypeError retained
- Application görünümü
- Destination: absent
- Bağlam ayrı düzeltilir
Bir base seçmek yeni local çözümleme işlemidir; başarısız işlem geçmişi değişmez.
- Adres metni
- /catalog/atlas
- Yerel URL parser
- Base required
- Application görünümü
- HTTP: not sent
ROLLER · STATE · VERİ AKIŞI
Önce resource ile adresini ayır
Duru kitap kataloğunda Atlas kaydını açıyor. Resource, uygulamanın bu kayda verdiği kavramsal kimliktir; URL onu adresleyen identifier’dır. Server aynı kaydı HTML sayfası veya JSON representation olarak sunabilir. URL metnini görünce hangi bytes’ın döneceğini, kaydın varlığını veya Duru’nun erişim hakkını henüz bilmiyoruz.
RFC 3986’da URI, resource identification için genel çerçevedir; URL, erişim mekanizması veya konumla ilişkili identifier türü olarak anlatılır. Güncel browser API’sinin adı URL’dir ve WHATWG standardı browser’ların ortak parsing davranışını tanımlar. RFC generic syntax ile browser parsing’i bütün köşe durumlarında aynı algoritma ilan etme.
Adresin parse edilmesi DNS resolution, TCP/TLS kurulması veya HTTP request gönderilmesi değildir. Bu derste yalnız yerel metin işleme yapılır. books.example bir eğitim adı; sahne oraya bağlanmaz.
Bir URL’yi parçalara ayır
https://books.example:8443/catalog/atlas?lang=tr&tag=network&tag=web#summary örneğini soldan sağa oku: scheme, authority içindeki host/port, path, query ve fragment. Ayırıcıların hangi component’i başlattığı anlamı belirler; her şeyi slash’a göre kesmek yeterli değildir.
Artifact, new URL(input) sonucundan protocol, hostname, host, port, pathname, search ve hash alanlarını gösterir. API’nin protocol değeri https: olur; search ? ile, hash # ile başlar. URL record’daki kavram ile getter’ın kullanıcıya sunduğu metin representation’ını ayır.
Örnekte hostname books.example, host books.example:8443 olur. Path /catalog/atlas’tır. Query üç pair taşır; fragment summary’dir. Bu çıktılar parser observation’dır; henüz request veya server route kararı yok.
Scheme hangi adres ailesini seçer?
Scheme adresin nasıl yorumlanacağını belirleyen ilk component’tir. http ve https web resource erişimi için kullanılır; mailto gibi başka scheme’ler aynı transport veya aynı path yapısını vaat etmez. Her geçerli URL’nin “browser bir HTTP GET yapacak” anlamına geldiğini varsayma.
https metni, HTTPS kullanma niyetini belirtir. Parser başarılı diye certificate validation yapılmış veya güvenli bir bağlantı kurulmuş olmaz. TLS kontrolü ayrı derste gerçek handshake ve validation sınırlarıyla ele alınır.
Application yalnız HTTPS resource link’i kabul edecekse scheme policy’si parser sonucuna uygulanır. Geçerli syntax ile uygulamada uygun kullanım iki ayrı karardır; bu ders policy sonucunu network başarısı olarak sunmaz.
Host ve port, path’in parçası değildir
Host, authority içinde hedefi adlandırır; domain name veya IP address biçimleri olabilir. DNS’in role’ü domain name’i çözümlemekle ilgilidir. Parser’ın hostname alanını üretmesi DNS cevabını veya bir server process’in varlığını kanıtlamaz.
Port, network service endpoint seçimine katılan sayısal component’tir. 8443 sayısı bu fixture’da explicit’tir; evrensel “güvenli alternatif HTTPS portu” kuralı değildir. Service’in gerçekten dinleyip dinlemediği ve protocol’ün çalışıp çalışmadığı ayrıca doğrulanır.
HTTPS default port 443’tür. new URL("https://books.example:443/catalog") serialization’da default port’u kaldırır; port getter’ı boş string döndürür. Bu, hedefin portsuz olduğu anlamına gelmez. Explicit non-default 8443 ise korunur ve origin karşılaştırmasını etkiler.
Host/hostname ayrımı özellikle log ve configuration incelerken işe yarar: host port içerebilir, hostname içermez. Raw metinde karakter aramak yerine aynı parser’ın ürettiği component’lerle karar ver.
Path bir uygulama adresidir
/catalog/atlas, authority’den sonra gelen hierarchical path’tir. Slash’larla ayrılan segments uygulamanın route sözleşmesine girdi olabilir. Bunun server diskinde catalog klasörü ve atlas dosyası olması gerekmez: route handler bir database kaydından response üretebilir.
Path’in anlamını server/framework belirler; URL parser uygulama route tablosunu bilmez. Trailing slash veya case değişikliği uygulamada farklı resource’a, redirect’e ya da aynı route’a karşılık gelebilir. Bu fixture’da /catalog/atlas yalnız kayıt adresidir; dosya sistemi sonucu çıkarılmaz.
Query ile path’i aynı alan sayma. /catalog/atlas?lang=tr örneğinde pathname query’yi içermez. Hangi alanın router’a, locale seçimine veya cache key’e girdi olduğu sonraki işlemde ayrıca tanımlanır.
Query pair’leri kayıpsız oku
Query ? ile başlar; URL standardı bu component’in bütün uygulamalarda aynı business anlamını taşımasını şart koşmaz. Key=value&key=value, URLSearchParams’ın işlediği yaygın form representation’ıdır. Application hangi key’in geçerli, hangi değerin kabul edilebilir olduğunu ayrıca belirler.
Bu örnekte tag iki kez vardır. searchParams.get("tag") ilk değeri network olarak döndürür; getAll("tag") network ve web değerlerini birlikte verir. Tek değer varsayan code ikinci etiketi sessizce kaybedebilir. Parametre multiplicity’si, syntax ve application schema arasındaki bir sözleşmedir.
URLSearchParams’a bütün URL string’ini query sanarak verme; URL object’in searchParams alanını veya ayrılmış search metnini kullan. Query parse edilince lang=tr bir locale adayıdır; object ownership veya authenticated identity kanıtı değildir.
Fragment hangi tarafta kalır?
#summary bir fragment’tir. Normal HTTP resource request’inin target’ına gönderilmez; client, representation içindeki ilgili bölümü seçmek için kullanabilir. Bu URL’den origin-form path/query türetirsek /catalog/atlas?lang=tr&tag=network&tag=web elde ederiz; #summary dışarıda kalır.
Fragment’ın yalnız browser tarafından işlenmesi “gizli veri kasası” olduğu anlamına gelmez. Page code onu okuyabilir ve ayrıca bir request’e koyabilir. Buradaki dar claim, ilk URL’nin fragment component’inin normal resource request’ine dahil olmamasıdır.
Sahne path/query adayını hazırlayıp fragment’ı client tarafında ayrı gösterir. Gerçek HTTP gönderimi veya DOM scrolling çalıştırılmaz; request-target türetme ile fragment tüketimi ayrı local işlemlerdir.
Encoding, metni taşıma biçimidir
Percent-encoding bir byte’ı % ve iki hexadecimal digit ile temsil eder. Unicode metnin önce hangi encoding ile byte’a dönüştüğü önemlidir. q=notlar ı örneğinde URLSearchParams, UTF-8 representation’ını ve form serialization’ını kullanır; artifact sonucu q=notlar+%C4%B1 olur.
Form query serialization’da space + olur; literal + değeri ise %2B olarak korunur. Genel URL component’lerinde “+ her zaman space” kuralı yoktur. Aynı resource’a ait URL.search ile URLSearchParams serialization’ı metinsel olarak farklı görünebilir; hangi katmanın temsilini okuduğunu belirt.
Encoding encryption veya authorization değildir. Değer açıldığında yine aynı application input’tur. Zaten encoded metni raw değer sanıp tekrar encode etmek representation’ı değiştirir; parsing ve validation sırasını tek bir açık sözleşmede tut.
Artifact native API ile round-trip yapılan küçük normal metin örnekleri içerir. Server’ın özel decode pipeline’ı veya bir parser bypass modeli bu fixture’da yoktur.
Absolute adres ve relative reference
Absolute URL scheme ve gerekli component’leriyle kendi parsing bağlamını sağlar. /catalog/atlas gibi relative reference ise base olmadan hangi host’a ait olduğunu söylemez. new URL("/catalog/atlas") TypeError üretir; aynı reference geçerli bir HTTPS base ile çözülebilir.
Relative resolution string concatenation değildir. Base path’in son slash’ı, reference’ın root-relative veya current-directory-relative oluşu ve query/fragment türü sonucu etkiler. WEB-06.03 bu hesapları ayrı ayrı izler.
Parser başarılıysa oluşan absolute URL’nin component’lerini yeniden okuyabilirsin. Henüz destination’ın erişilebilirliğini veya application policy’sinde uygun olduğunu bilmiyoruz; çözümleme, adlandırma ve izin farklı sorulardır.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Query değerleri
- Normal katalog reference’ı seçildi
Duru, books.example port 8443 üzerindeki Atlas katalog link’ini seçer. Query’de lang=tr ve iki tag değeri vardır; #summary ayrı fragment’tır. Consumer, hangi component’i hangi amaçla kullandığını açık tutmalıdır.
- URL reference evidence
- Atlas URL / query + fragment
- Structured parsing
- Parsed fields yok
- Consumer boundary
- Application policy yok
- Parser alanları birbirinden ayrıldı
Parser hostname’i books.example, host’u books.example:8443 ve pathname’i /catalog/atlas olarak ayırır. Origin https://books.example:8443 olur. Metnin benzemesi, structured hostname veya origin karşılaştırmasının yerini tutmaz.
- URL reference evidence
- Atlas URL / query + fragment
- Structured parsing
- hostname / host / origin separate
- Consumer boundary
- Application policy yok
- Karar için representation kaybı durdu
tags=[network, web] iki değerdir. İlk value’yu seçmek ikinci value’yu yok sayan farklı application schema kararıdır; parser’ın onları tek value’ya çevirdiği iddia edilmez.
- URL reference evidence
- Atlas URL / query + fragment
- Structured parsing
- hostname / host / origin separate
- Consumer boundary
- Both tags retained: network,web
- Encoding authority değildir
A+B değeri form encoding’de q=A%2BB olur; notlar ı değeri q=notlar+%C4%B1 olur. Bu dönüşüm encryption veya permission oluşturmaz, yalnız representation değiştirir.
- URL reference evidence
- Raw values / form serialization separate
- Structured parsing
- hostname / host / origin separate
- Consumer boundary
- Both tags retained: network,web
- Parser success policy success değildir
Structured URL üretildikten sonra uygun scheme/destination/port ve query schema application tarafından ayrıca değerlendirilir. Resource authorization’ın sonucu URL anatomy’den çıkarılmaz.
- URL reference evidence
- Raw values / form serialization separate
- Structured parsing
- Parsed URL / policy still separate
- Consumer boundary
- Both tags retained: network,web
- Boundary sonucu desteklenen alanda
Query multiplicity ve ilk/all values farkı korunmuştur. NetworkRequestsExecuted=0 olduğundan server yorumlaması veya data exposure sonucu eklenmez.
- URL reference evidence
- Raw values / form serialization separate
- Structured parsing
- Parsed URL / policy still separate
- Consumer boundary
- Multiplicity preserved / server unknown
Fragment sınırı
- Normal katalog reference’ı seçildi
Duru, books.example port 8443 üzerindeki Atlas katalog link’ini seçer. Query’de lang=tr ve iki tag değeri vardır; #summary ayrı fragment’tır. Consumer, hangi component’i hangi amaçla kullandığını açık tutmalıdır.
- URL reference evidence
- Atlas URL / query + fragment
- Structured parsing
- Parsed fields yok
- Consumer boundary
- Application policy yok
- Parser alanları birbirinden ayrıldı
Parser hostname’i books.example, host’u books.example:8443 ve pathname’i /catalog/atlas olarak ayırır. Origin https://books.example:8443 olur. Metnin benzemesi, structured hostname veya origin karşılaştırmasının yerini tutmaz.
- URL reference evidence
- Atlas URL / query + fragment
- Structured parsing
- hostname / host / origin separate
- Consumer boundary
- Application policy yok
- Karar için representation kaybı durdu
HTTP origin-form yalnız /catalog/atlas?lang=tr&tag=network&tag=web içerir. #summary bu request target’a katılmaz; client component’i olarak kalır. Server router’ın fragment’ı aldığı iddia edilmez.
- URL reference evidence
- Atlas URL / query + fragment
- Structured parsing
- hostname / host / origin separate
- Consumer boundary
- Request target excludes #summary
- Encoding authority değildir
A+B değeri form encoding’de q=A%2BB olur; notlar ı değeri q=notlar+%C4%B1 olur. Bu dönüşüm encryption veya permission oluşturmaz, yalnız representation değiştirir.
- URL reference evidence
- Raw values / form serialization separate
- Structured parsing
- hostname / host / origin separate
- Consumer boundary
- Request target excludes #summary
- Parser success policy success değildir
Structured URL üretildikten sonra uygun scheme/destination/port ve query schema application tarafından ayrıca değerlendirilir. Resource authorization’ın sonucu URL anatomy’den çıkarılmaz.
- URL reference evidence
- Raw values / form serialization separate
- Structured parsing
- Parsed URL / policy still separate
- Consumer boundary
- Request target excludes #summary
- Boundary sonucu desteklenen alanda
Fragment client’ta, request-target path/query kapsamındadır. Bu separation UI scroll veya gerçek HTTP delivery ölçümü değildir.
- URL reference evidence
- Raw values / form serialization separate
- Structured parsing
- Parsed URL / policy still separate
- Consumer boundary
- Fragment separated / delivery unknown
VARSAYIM · SINIR · KONTROL
Trust hangi işlemde kuruluyor?
Bir security incelemesinde önce input’u tüketen katmanı bul: browser parser mı, server router mı, application validation mı? Aynı URL farklı amaçlar için işlenebilir. “Text looks like our domain” ifadesi parser sonucunun veya policy kararının yerine geçmez.
Duru’nun normal katalog link’ini artifact üzerinden izle. Scheme/hostname/port adayları yerel olarak elde edilir; resource authorization henüz uygulanmaz. Sorulacak soru, sonraki katmanın hangi structured alanı hangi amaç için trusted saydığıdır.
Artifact’ta tags array’ini, ilk get sonucunu ve request-target adayını yan yana koy. network ve web iki ayrı query value’dur; summary fragment’ı bu listede bulunmaz. Review notunda ikinci tag’ın neden kaybolmadığını ve fragment’ın hangi aşamada client’ta kaldığını açıkça anlat.
Representation kaybı karar kaybına dönüşebilir
İki tag değerinden yalnız birini tutmak veya fragment’ı request-target sanmak, işlem hakkında yanlış sonuç üretir. Önce ham reference’ı, parser sonucunu ve application schema sonucunu ayrı gözlemler olarak kaydet; birbirinin yerine yazma.
Bu link’te iki tag query pair’i ile #summary fragment’ı farklı consumer’lara aittir. URL parser bunları ayrı alanlarda verir; application schema hangi query değerlerinin kullanılacağını belirler. Fragment’ın request-target dışında kalması, client code’un onu ayrıca başka bir mesajda göndermesini engelleyen bir gizlilik kontrolü değildir.
Encoding branch’inde raw A+B ile serialized q=A%2BB değerlerini karşılaştır. Farklı metinler aynı normal değerin iki representation’ıdır; bu farkı yeni permission veya encrypted secret diye raporlama. Round-trip başarısı yalnız seçilmiş API dönüşümünü doğrular, server’ın bütün input pipeline’ını değil.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Encoding check
- Raw query değerleri seçildi
Form serialization için iki normal value seçilir: A+B ve notlar ı. Bunlar query string değil, URLSearchParams’a verilecek ham değerlerdir. Hangi API representation’ının üretildiği bilinmeden plus veya percent text’i yorumlanmaz.
- URL input evidence
- Raw: A+B / notlar ı
- Normalization review
- Serialization henüz yok
- Observation scope
- Server observation yok
- Form serialization kendi kurallarını uygular
URLSearchParams literal + karakterini %2B, space karakterini + ve UTF-8 ı byte’larını %C4%B1 yapar. Bu örnekte q=A%2BB ve q=notlar+%C4%B1 oluşur. Raw input ile serialized query farklı metin biçimleridir.
- URL input evidence
- Raw: A+B / notlar ı
- Normalization review
- q=A%2BB / q=notlar+%C4%B1
- Observation scope
- Server observation yok
- Encoding source value’suyla eşleşti
q=A%2BB literal plus’ı korur, q=notlar+%C4%B1 space ve UTF-8 ı representation’ını verir. Round-trip aynı value’yu geri kurar; bütün server pipeline doğrulanmış olmaz.
- URL input evidence
- A+B ↔ q=A%2BB
- Normalization review
- q=A%2BB / q=notlar+%C4%B1
- Observation scope
- Claim scope yok
- Query multiplicity regression’da var
lang ve iki tag value ayrı okunur; tags expected [network, web]’dir. Fragment summary query key/value değildir ve HTTP origin-form’a katılmaz.
- URL input evidence
- A+B ↔ q=A%2BB
- Normalization review
- Two tags / fragment excluded
- Observation scope
- Claim scope yok
- Observation minimum veriyle tutuldu
Bu katalog URL’si public locale/tag bilgisi taşır. Gerçek URL’ler history/log/telemetry’ye yayılabileceği için scheme/host/path ve gereken schema alanları amaçla sınırlı seçilir; URL default kalıcı identity kaydı yapılmaz.
- URL input evidence
- A+B ↔ q=A%2BB
- Normalization review
- Two tags / fragment excluded
- Observation scope
- Public fields / purpose-limited log
- Parser evidence network yerine geçmedi
Seçilmiş form round-trip ve query multiplicity uygundur. Encoding secrecy, input trust veya server acceptance sonucu üretmez.
- URL input evidence
- A+B ↔ q=A%2BB
- Normalization review
- Two tags / fragment excluded
- Observation scope
- Round-trip consistent / trust separate
Default port
- Açık default port içeren URL seçildi
Input https://books.example:443/catalog’tur. Raw reference :443 içerir; href, hostname, port ve origin getter’ları henüz okunmadı. Burada parser çalışması yerel işlemdir; service’e bağlantı yoktur.
- URL input evidence
- Raw https://books.example:443/catalog
- Normalization review
- Getter sonuçları bekliyor
- Observation scope
- Network ölçülmedi
- Default port serialization’dan çıkar
HTTPS default port 443 olduğu için native URL API port getter’ını boş string verir ve href=https://books.example/catalog üretir. Bu normalize representation’da service portu yok olmuş değildir; scheme’in default port’u geçerlidir.
- URL input evidence
- Raw :443 bilgisi karşılaştırmada tutuldu
- Normalization review
- port=""; href=https://books.example/catalog
- Observation scope
- Network ölçülmedi
- Origin aynı default endpoint’i adlandırır
Bu HTTP(S) örneğinde origin https://books.example olur. Path /catalog origin’in parçası değildir. Explicit :443 ile implicit HTTPS default port farklı raw text’ler olsa da aynı normalized origin’i üretir.
- URL input evidence
- Raw :443 / normalized HTTPS URL
- Normalization review
- Origin https://books.example; default 443
- Observation scope
- Origin eşitliği access izni değildir
- Non-default port ayrı karşılaştırmadır
Ana katalog input’unda port 8443’tür; bu non-default değer serialization’da korunur ve origin https://books.example:8443 olur. 443 ile 8443 karşılaştırması port normalization’ı açıklar, TLS veya listener başarısını ölçmez.
- URL input evidence
- Karşılaştırma: default 443 / non-default 8443
- Normalization review
- 443 boş getter / 8443 korunur
- Observation scope
- TLS/listener sonucu yok
- Gözlemin üreticisi URL API’dir
Href ve getter çıktıları yerel URL API’nin parsing sonucudur. Application scheme/port policy’si, DNS, TLS ve HTTP sonucu farklı işlemlerden gelir. Parser çıktısını bunların yerine yazmak, hesaplanmış adresi gözlenmiş connection gibi raporlar.
- URL input evidence
- Input ve normalized çıktı birlikte tutulur
- Normalization review
- Üretici local URL API
- Observation scope
- Coverage parsing ile sınırlı
- Boş getter, portsuz service değildir
Default-port ve non-default karşılaştırmalarında hangi representation’ın kullanıldığı açık kalır. Relative input’a base vermeden yapılan ayrı parse işlemi TypeError üretir; başarılı default-port sonucu bu failure’a taşınmaz. Network veya permission sonucu yine bilinmez.
- URL input evidence
- Default/non-default/base gereksinimi ayrı
- Normalization review
- Default port normalize; TypeError ayrı
- Observation scope
- Parser scope biliniyor; access bilinmiyor
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Aynı parser, açık application policy
URL’yi standard parser ile çözümle; izin verilen scheme, destination veya port gibi uygulama gereksinimlerini structured sonuç üstünde değerlendir. Parser’ın başarılı olması allow kararı değildir. Query key/value schema’sı da ayrı doğrulanır.
Configuration’da raw URL, normalized URL ve policy sonucu arasındaki farkı anlaşılır tut. Observation defterinde accepted-by-parser ile accepted-by-application ayrı alanlar olmalıdır; network success ancak gerçekten ölçüldüyse eklenir.
Log ve link üretiminde veri sınırını koru
Query’ye secret veya kişisel veriyi gereksizce koyma; URL farklı log, history ve telemetry yüzeylerinde görünebilir. Bu fixture yalnız public katalog ve etiket bilgisi taşır. Log için gerekli alanları seç; bütün URL’yi varsayılan olarak kalıcı identity kaydı yapma.
Link üretirken değerleri string birleştirerek tahmin etmek yerine URL/URLSearchParams ile oluştur. Sonuçta beklenen pathname, query multiplicity ve fragment ayrımını benign unit fixture’larla doğrula; encoding’i güvenlik kontrolü diye etiketleme.
Lab observation’ında port getter’ının boş olduğu default-port case’i ayrı tut. Bir ekip arkadaşı bunu port eksikliği sanarsa normalized href ve scheme’i birlikte göster. Log veya configuration karşılaştırması için hangi representation’ın kullanıldığını sabitlemek, aynı hedefin iki farklı metin biçimini doğru yorumlamaya yardım eder.
ŞİMDİ VAKAYA UYGULA
Query values, fragment ve normalized port hangi consumer kararlarına aittir?
Duru, Atlas katalog link’inde iki tag kullanır. Fragment summary client’ta kalırken server target’ı path ve query taşır. URL parsing veya encoding işlemi, bu adrese erişim izni vermez.
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
URL component ve serialization defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"input": "https://books.example:8443/catalog/atlas?lang=tr&tag=network&tag=web#summary",
"expected": {
"protocol": "https:",
"hostname": "books.example",
"host": "books.example:8443",
"port": "8443",
"pathname": "/catalog/atlas",
"search": "?lang=tr&tag=network&tag=web",
"hash": "#summary",
"origin": "https://books.example:8443",
"tags": [
"network",
"web"
],
"httpOriginForm": "/catalog/atlas?lang=tr&tag=network&tag=web"
},
"defaultPort": {
"input": "https://books.example:443/catalog",
"expectedPort": "",
"expectedHref": "https://books.example/catalog"
},
"formEncoding": [
{
"value": "notlar ı",
"expected": "q=notlar+%C4%B1"
},
{
"value": "A+B",
"expected": "q=A%2BB"
}
],
"relativeWithoutBase": {
"input": "/catalog/atlas",
"expectedError": "TypeError"
},
"networkRequestsExecuted": 0
}- input
- Yerel olarak parse edilen normal katalog adresi.
- expected.host / expected.hostname
- Host port’u içerir; hostname içermez.
- expected.tags
- Repeated query values getAll ile korunur.
- expected.httpOriginForm
- Path/query adayı; fragment hariç, gerçek request yok.
- formEncoding
- Form serialization ve raw değere geri dönüş.
Sentetik eğitim girdileri gerçek Node URL API ile kontrol edilir. DNS, HTTP, TLS, DOM navigation veya server-side decode çalıştırılmaz.
İki yanlış kanı
Parse edilen HTTPS URL’ye güvenli bağlantı kurulmuştur.
Parsing yerel işlemdir; DNS, TLS validation ve HTTP sonucu ayrıca ölçülür.
Encoding gizlilik sağlar; fragment server’a giden query’nin parçasıdır.
Encoding representation’dır. Normal request target path/query taşır; fragment client tarafında ayrı kalı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.
tag=network&tag=web query’sini tek değer gibi okursan hangi bilgiyi kaybedersin?
- İki ayrı tag değeri ve sırası kaybolur.
- İkinci tag syntax hatası olduğu için atılmalıdır.
Gerekçeli cevabı oku
İki ayrı tag değeri ve sırası kaybolur. — Örnek tags=[network, web] verir. Query key’inin tekrarı geçerli bir veri yapısıdır.
HTTP origin-form request target neden #summary içermez?
Dersten seçilen artifact alanları; öğretim örneği
- expected.host
- books.example:8443
- expected.hostname
- books.example
- expected.hash
- #summary
- expected.httpOriginForm
- /catalog/atlas?lang=tr&tag=network&tag=web
- Fragment browser tarafındadır; HTTP target path ve query taşır.
- Fragment pathname’e eklenerek server route’u olarak gönderilir.
Gerekçeli cevabı oku
Fragment browser tarafındadır; HTTP target path ve query taşır. — hash bir URL bileşenidir, fakat bu origin-form target içinde server’a gönderilmez.
A+B ve notlar ı değerlerinin form encoding farkını açıkla. Percent-encoding neden encryption değildir?
Gerekçeli cevabı oku
URLSearchParams form serialization boşluğu +, literal plus karakterini %2B yapar. ı karakterinin UTF-8 byte’ları %C4%B1 olarak temsil edilir. Bu geri çözülebilen representation syntax’ıdır; secret key veya confidentiality sağlamaz. Aynı raw URL string’inin farklı parser ve context’lerde aynı anlamda yorumlanacağını varsayamayız.
□ Plus karakteri ile boşluğun serialization farkını açıkladım.
□ Encoding’den confidentiality garantisi çıkarmadı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 — URI authoritySyntax · Description: host and port
- MDN — URI schemesSyntax · Description
- MDN — URI pathSyntax · Description
- MDN — URI querySyntax · Description
- MDN — URI fragmentDescription: client processing; fragment not sent in request
- MDN — URLSearchParamsDuplicate search parameters · No URL parsing · Percent encoding · Preserving plus signs · Interaction with URL.searchParams
- MDN — URL constructorSyntax · Parameters · Exceptions