ToolDeck

URL Ayrıştırıcı

Bir URL'yi bileşenlerine ayırın — protokol, ana makine adı, yol, sorgu parametreleri, hash

Örnek dene

URL Ayrıştırma Nedir?

URL ayrıştırma, bir Tekdüzen Kaynak Bulucuyu (Uniform Resource Locator) bireysel bileşenlerine ayırma işlemidir: protokol (şema), ana makine adı, port, yol adı, sorgu parametreleri ve parça tanımlayıcısı. Her URL, RFC 3986 ve WHATWG URL Standardı tarafından tanımlanan bir yapıya uygundur. Bir URL ayrıştırıcısı ham dizeyi okur, sınırlayıcı karakterlere (://, :, /, ?, #, &, =) göre her segmenti tanımlar ve bunları ayrı, erişilebilir alanlar olarak döndürür.

Tarayıcılar, bir adres yazdığınızda veya bir bağlantıya tıkladığınızda URL ayrıştırma işlemi gerçekleştirir. JavaScript URL yapıcısı, Python'un urllib.parse modülü ve Go'nun net/url paketi; aynı yapısal kurallara uyan ayrıştırıcılar uygular. Bir URL'yi ayrıştırmak, URL kodlamanın tersidir: karakterleri güvenli aktarım için dönüştürmek yerine, önceden oluşturulmuş bir URL'yi onu oluşturan parçalara ayrıştırırsınız.

https://api.example.com:8080/v1/users?page=2&limit=10#section gibi tipik bir URL altı farklı bileşen içerir. Sınırlayıcı karakterler — ://, :, /, ?, &, =, ve # — ayrıştırmayı belirleyici kılan unsurlardır: her biri bir sınır işaret eder ve ayrıştırıcının alanları belirsizlik olmadan çıkarmasına olanak tanır.

Çevrimiçi URL Ayrıştırıcı Neden Kullanılır?

Bir URL'yi gözle elle bölmek hataya açıktır; özellikle dize kodlanmış karakterler, birden fazla sorgu parametresi veya standart dışı portlar içerdiğinde. Bu araç, URL'yi tarayıcıların kullandığı WHATWG uyumlu algoritmayla ayrıştırır ve her bileşeni net, kopyalanabilir bir tabloda görüntüler.

Tarayıcınızda Anında Ayrıştırın
Herhangi bir URL'yi yapıştırın ve tüm bileşenleri hemen ayrıştırılmış şekilde görün. Sayfa yenilemesi yok, sunucu çağrısı yok, bekleme yok.
🔒
URL'lerinizi Gizli Tutun
Ayrıştırma, yerel URL API'si kullanılarak tamamen tarayıcınızda çalışır. Girdiğiniz URL makinenizden hiç ayrılmaz.
🔍
Her Ayrıntıyı İnceleyin
Protokol, ana makine adı, port, yol adı, sorgu dizesi, hash ve kodu çözülmüş değeriyle birlikte her bir sorgu parametresini görün.
📋
Tek Tek Bileşenleri Kopyalayın
Tam değeri almak için herhangi bir alanın yanındaki kopyala düğmesine tıklayın. Alt dizeleri elle seçip kırpmaya gerek yok.

URL Ayrıştırıcı Kullanım Senaryoları

Frontend Yönlendirme Hata Ayıklama
Yol segmentlerinin ve hash parçalarının yönlendirici yapılandırmanızla eşleştiğini doğrulayın. 404 hatasına yol açmadan önce yanlış yerleştirilmiş eğik çizgileri veya beklenmedik sorgu parametrelerini fark edin.
Backend API Uç Nokta Doğrulama
Yol işleyicileri veya ara katman yazılımı yazmadan önce gelen istek URL'lerinin doğru ana makine adı, port ve yol yapısını içerdiğini doğrulayın.
DevOps Yönlendirme Kuralı Testi
Nginx, Apache veya CDN yönlendirme kuralları yazarken, her bileşenin doğru eşlendiğini onaylamak için orijinal ve hedef URL'leri ayrıştırın.
QA Bağlantı Doğrulama
Test raporlarından veya hata biletlerinden URL'leri ayrıştırarak hangi sorgu parametresinin veya parçanın yanlış sayfanın yüklenmesine neden olduğunu tespit edin.
Veri Hattı URL Çıkarma
Alan adı düzeyinde raporlar oluşturmak veya trafiği uç noktaya göre filtrelemek için log dosyalarındaki veya analiz verilerindeki URL'lerden ana makine adlarını ya da yol segmentlerini çıkarın.
URL Yapısını Öğrenme
Web protokollerine yeni başlayan öğrenciler ve geliştiriciler gerçek URL'leri yapıştırarak hangi sınırlayıcının hangi sınırı işaret ettiğini hemen görebilir.

URL Bileşen Başvurusu

Aşağıdaki tablo, JavaScript URL yapıcısının bir URL'yi ayrıştırırken döndürdüğü her özelliği göstermektedir. Python'un urlparse sonucunda, Go'nun url.URL yapısında ve PHP'nin parse_url çıktısında da aynı bileşenler bulunur; ancak özellik adları diller arasında farklılık gösterir.

ÖzellikÖrnekAçıklama
protocolhttps:Scheme including the trailing colon
hostnameapi.example.comDomain name or IP address
port8080Port number (empty string if default)
pathname/v1/usersPath starting with /
search?page=2&limit=10Query string including the leading ?
hash#sectionFragment identifier including the leading #
originhttps://api.example.com:8080protocol + hostname + port
hostapi.example.com:8080hostname + port
usernameadminCredentials before @ (rarely used in practice)
passwordsecretCredentials before @ (avoid in production URLs)
href(full URL)The complete, serialized URL string

WHATWG URL Standardı ile RFC 3986 Karşılaştırması

URL'lerin nasıl ayrıştırılması gerektiğini tanımlayan iki belirtim vardır. Temel yapı konusunda hemfikirdirler ancak uç durumlarda ayrışırlar — bu ayrışma, tarayıcınızın bir URL'yi sunucunuzdan farklı şekilde işlemesinin genellikle nedenidir.

WHATWG URL Standard
Tüm modern tarayıcılar ve JavaScript URL yapıcısı tarafından kullanılır. Eksik şemalar, yol ayırıcısı olarak ters eğik çizgiler ve Punycode ile ASCII dışı ana makine adları gibi hatalı girişleri kabul edip normalleştirir. url.spec.whatwg.org adresinde yaşayan standart olarak tanımlanmıştır.
RFC 3986
Resmi IETF belirtimi (2005). WHATWG'den daha katıdır: tarayıcıların kabul ettiği bazı girişleri reddeder. Go'nun net/url'si ve Python'un urllib.parse'ı dahil birçok sunucu tarafı kütüphanesi tarafından kullanılır. RFC 3986'da tanımlanmıştır.

Pratikte, çoğu farklılık uluslararası alan adları (IDN), eksik şemalar veya olağandışı karakterler içeren URL'ler ayrıştırılırken ortaya çıkar. WHATWG ayrıştırıcısı IDN ana makine adlarını otomatik olarak Punycode'a dönüştürürken, katı RFC 3986 ayrıştırıcıları bunları reddedebilir. Bu araca bir URL yapıştırırsanız ve sunucu tarafı kodunuzun ürettiğinden farklı sonuçlar görürseniz, WHATWG ile RFC arasındaki fark büyük olasılıkla nedendir.

Kod Örnekleri

Her büyük dilde yerleşik bir URL ayrıştırıcısı vardır. Aşağıdaki örnekler aynı URL'yi ayrıştırır ve bileşenlerini çıkarır. Diller arasındaki küçük adlandırma farklılıklarına dikkat edin: Python, protocol yerine scheme kullanır ve Go, search yerine RawQuery'yi gösterir.

JavaScript (browser / Node.js)
const url = new URL('https://api.example.com:8080/v1/users?page=2&limit=10#section')

url.protocol  // → "https:"
url.hostname  // → "api.example.com"
url.port      // → "8080"
url.pathname  // → "/v1/users"
url.search    // → "?page=2&limit=10"
url.hash      // → "#section"

// Iterate over query parameters
for (const [key, value] of url.searchParams) {
  console.log(`${key} = ${value}`)
}
// → "page = 2"
// → "limit = 10"

// Modify and re-serialize
url.searchParams.set('page', '3')
url.toString()
// → "https://api.example.com:8080/v1/users?page=3&limit=10#section"
Python
from urllib.parse import urlparse, parse_qs

result = urlparse('https://api.example.com:8080/v1/users?page=2&limit=10#section')

result.scheme    # → 'https'
result.hostname  # → 'api.example.com'
result.port      # → 8080
result.path      # → '/v1/users'
result.query     # → 'page=2&limit=10'
result.fragment  # → 'section'

# Parse query string into a dict
params = parse_qs(result.query)
params['page']   # → ['2']
params['limit']  # → ['10']

# Reconstruct with modifications
from urllib.parse import urlencode, urlunparse
new_query = urlencode({'page': '3', 'limit': '10'})
urlunparse(result._replace(query=new_query))
# → 'https://api.example.com:8080/v1/users?page=3&limit=10#section'
Go
package main

import (
	"fmt"
	"net/url"
)

func main() {
	u, err := url.Parse("https://api.example.com:8080/v1/users?page=2&limit=10#section")
	if err != nil {
		panic(err)
	}

	fmt.Println(u.Scheme)   // → "https"
	fmt.Println(u.Hostname()) // → "api.example.com"
	fmt.Println(u.Port())     // → "8080"
	fmt.Println(u.Path)       // → "/v1/users"
	fmt.Println(u.RawQuery)   // → "page=2&limit=10"
	fmt.Println(u.Fragment)   // → "section"

	// Query params as map
	q := u.Query()
	fmt.Println(q.Get("page"))  // → "2"
	fmt.Println(q.Get("limit")) // → "10"
}
PHP
<?php
$url = 'https://api.example.com:8080/v1/users?page=2&limit=10#section';
$parts = parse_url($url);

$parts['scheme'];   // → "https"
$parts['host'];     // → "api.example.com"
$parts['port'];     // → 8080
$parts['path'];     // → "/v1/users"
$parts['query'];    // → "page=2&limit=10"
$parts['fragment']; // → "section"

// Parse query string into an array
parse_str($parts['query'], $params);
$params['page'];    // → "2"
$params['limit'];   // → "10"

Sık Sorulan Sorular

URL ile URI arasındaki fark nedir?
URL (Tekdüzen Kaynak Bulucu), hem tanımlayıcıyı hem de erişim mekanizmasını (https:// gibi şemayı) içeren belirli bir URI (Tekdüzen Kaynak Tanımlayıcısı) türüdür. Tüm URL'ler URI'dir, ancak tüm URI'ler URL değildir. urn:isbn:0451450523 gibi bir URN, kaynağı nasıl alınacağını belirtmeden adıyla tanımlayan bir URI'dir. Web geliştirmede, karşılaştığınız neredeyse her URI bir URL olduğundan terimler çoğunlukla birbirinin yerine kullanılır.
URL yapıcısı göreli URL'leri nasıl işler?
JavaScript URL yapıcısı, göreli yolları ayrıştırırken bir temel URL gerektirir. new URL('/path?q=1') çağrısı bir TypeError fırlatır. Bir temel sağlamanız gerekir: new URL('/path?q=1', 'https://example.com'). Python'un urljoin'i ve Go'nun url.ResolveReference'ı aynı amaca hizmet eder. Bu araç, bir şema içeren tam ve mutlak URL'ler bekler.
URL'de port numarası yoksa ne olur?
Port atlandığında, ayrıştırıcı port özelliği için boş bir dize döndürür. Tarayıcı, şema için varsayılan portu varsayar: https için 443, http için 80, ftp için 21. Etkin porta origin veya host özelliği aracılığıyla erişebilirsiniz, ancak açık bir port belirtilmediğinden port alanı boş kalır.
URL Unicode karakterler içerebilir mi?
Evet, ancak iletim için kodlanmaları gerekir. WHATWG URL Standardı bunu otomatik olarak işler: uluslararası alan adları Punycode'a (xn-- ön eki) dönüştürülür ve ASCII aralığının dışındaki yol/sorgu karakterleri yüzde kodlanır. Bu araca Unicode içeren bir URL yapıştırırsanız, ayrıştırılmış çıktıda normalleştirilmiş, ASCII güvenli sürümü görürsünüz.
Bir URL'nin maksimum uzunluğu nedir?
Hiçbir standart maksimum URL uzunluğunu tanımlamaz — RFC 3986 bu konuda sessizdir. Pratikte tarayıcılar sınırlar uygular: Chrome adres çubuğunda yaklaşık 2 MB'a kadar desteklerken, Internet Explorer (eski) 2.083 karakterlik bir sınıra sahipti. Çoğu web sunucusu, istek satırı için varsayılan olarak 8 KB (Nginx) veya 8 KB (Apache) kullanır. Büyük veri iletmeniz gerekiyorsa sorgu dizeleri yerine POST istek gövdelerini kullanın.
Tam URL olmadan yalnızca sorgu dizesini nasıl ayrıştırabilirim?
JavaScript'te, yalnız bir sorgu dizesini ayrıştırmak için new URLSearchParams('page=2&limit=10') kullanın. Python'da urllib.parse.parse_qs('page=2&limit=10') kullanın. Her ikisi de parametreleri anahtar-değer çiftleri olarak döndürür. Bu, örneğin bir form gönderiminden veya yalnızca sorgu bölümünü yakalayan bir log girişinden sorgu dizesini ayrı olarak elinizde bulundurduğunuzda kullanışlıdır.
URL ayrıştırma ile URL kod çözme aynı şey midir?
Hayır. URL ayrıştırma, bir URL'yi yapısal bileşenlerine (şema, ana makine adı, yol, sorgu, parça) böler. URL kod çözme ise yüzde kodlanmış karakterleri orijinal biçimlerine geri dönüştürür (%20 boşluk olur, %26 ise & olur). İki işlem birbirini tamamlar: genellikle önce URL'yi ayrıştırır, ardından bireysel bileşen değerlerini çözersiniz. Ayrıştırmadan önce kod çözmek, & ve = gibi çözülmüş sınırlayıcıların yanlış yorumlanacağından URL yapısını bozabilir.