Tarayıcınızı
kullanırken her adres satırının başında, farkında olmasanız da o web sitesi ile
aranızdaki iletişimin hangi protokol ile yapılacağını http:// ya da https://
ibaresi ile belirtiyorsunuz.
Yeri
gelmiş de tarayıcımızın adres satırına yazdıklarımızdan bahsederken… URL nedir?
Ondan da bahsedelim. URL kısaltmasının açılımı Uniform Resource Locator
şeklinde. URL'ye basitçe adres diyebiliriz. Her geçerli URL bir kaynağı işaret
eder ve benzersiz biçimde tanımlar. Örneğin, web sitemiz içinde kullandığımız
bir CSS dosyasının ya da bir resmin tüm internet içinde bir kopyası daha
bulunmayan (tekil, benzersiz) bir adresi vardır.
URL
ve link (hyperlink), birbirinin yerine kullanılan terimler olsa da teknik
olarak tam anlamıyla birbirlerini karşılamazlar. Bir web sayfasında herhangi
bir dosyayı/kaynağı yüklemek için kullandığımız link içinde bir URL barındırır.
Bu URL olmadan link anlamsızdır. Örneğin, aşağıdaki a HTML etiketi (tag)
href özelliği (attribute) ile bir URL'e işaret eder ve kullanıcı bu
linke tıkladığında tarayıcı tarafından, href ile belirtilen URL'ye
yönlendirilir.
<a href="https://blog.alperguclu.com/">Blog</a>
Bir
URL'nin önceden belirli şekil şartlarını sağlaması gerekir. Aşağıda opsiyonel
kısımlar dahil tam bir URL'in parçalarını görebilirsiniz. (Kaynak: https://developer.mozilla.org/)
Scheme: URL'nin protokol bilgisini barındıran kısmıdır. Bu protokol HTTP, HTTPS gibi çok kullanılan bir protokol de olabilir client'ın ve server desteklediği pek çok başka protokolden biri de.
Authority: Alan adı ve port bilgilerini
barındıran kısımdır. HTTP için 80, HTTPS için 443 yazılmadan varsayılan port
olarak tarayıcınız tarafından kullanılır.
Path: Sunucu tarafında kaynağın yerini belirtir.
Sunucu kendi içinde hangi kaynağa/dosyaya ulaşılmak istendiğini buradan ayırt
eder.
Parameters: Client'tan server'a iletilmek istenen
ek bilgileri içerir. Örneğin: https://blog.alperguclu.com/search adresinde
bir arama sayfamız olsun. Bu arama sayfasına adres satırında parametre olarak
aranacak kelimeyi, https://blog.alperguclu.com/search?word=javascript şeklinde
gönderebiliriz. (Gerçekte böyle bir arama sayfası yok :) )
Anchor: URL'nin bu kısmı, erişilmek istenen kaynağın
belirli bir kısmını ifade etmek için kullanılıyor. Örneğin, yüklenecek web
sayfasının orta kısımlarında bir yerin görüntülenmesi isteniyorsa tarayıcının
sayfayı bu bölüme kaydırması bu kısımla sağlanıyor.
Adres
satırı ve URL'den bahsetmeye başlamadan önce konumuz HTTP'ydi. HTTP, TCP/IP
bazlı client ve server arasındaki veri alışverişini, içeriğin nasıl
isteneceğini ve internet üzerinden ne şekilde gönderileceğini standarda
bağlayan bir protokol. HTTP, client ile server arasındaki bağlantının kurulması
ve veri paketlerinin gönderilip alınması için TCP/IP kullanır. HTTP'nin 1991
yılında yayınlanan HTTP/0.9 versiyonundan başlayarak kullanılan farklı
versiyonları var. HTTP'nin en son versiyonu 2022 yılında yayınlanan HTTP/3 olsa
da 2015 yılında yayınlanmış olan HTTP/2 versiyonu yaygın olarak kullanılmaya
devam ediyor. HTTP versiyonları ile ilgili detaylı bilgiyi, yazının sonundaki
kaynaklardan alabilirsiniz.
HTTP'nin
yazılımcılar açısından en önemli özelliklerinden biri, stateless (durumsuz)
olması. Aynı bağlantı içinde gerçekleştirilen HTTP istekleri (request) arasında
hiçbir bağlantı bulunmuyor. Bununla birlikte cookie'ler(çerezler) yardımıyla
kullanıcı için bir oturum (session) oluşturmak mümkün. Örneğin bu session'a,
kullanıcı hesabınızla giriş yaptığınız bir web sayfasında, istek yaptığınız her
bir kaynak/sayfa için yeniden kullanıcı bilgisi girmenize gerek kalmasın diye
ihtiyacınız var. Veya bir alışveriş sitesinde sepete attığınız ürünün, siz web
sitesinde gezmeye devam ederken sepetten kaybolmaması için de benzer bir çözüm
kullanmanız gerek.
HTTP
request ve response örneklerini aşağıda görebilirsiniz (Kaynak: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview#http_flow).
Tarayıcınız ile sunucu arasındaki veri alışverişi, siz görmeseniz de bu şekilde
gerçekleşiyor.
Request:
Response:
Response'un
ilk satırında HTTP versiyonunu ve onu takiben "status code" ile
"status message"'ı görüyoruz. HTTP status mesajları ile ilgili bir
kaynağı aşağıya ekliyorum. Genel olarak 200 ile başlayan kodlar başarılı
istekler için, 400 ile başlayan kodlar client tarafında meydana gelen hatalar
için, 500 ile başlayan mesajlar ise sunucu tarafında meydana gelen hatalar için
kullanılır. Detayları kaynaklar kısmında görebilirsiniz.
Response'un ikinci satırından itibaren ise headerları görüyorsunuz. Hem request hem de response'ta gördüğünüz bu HTTP headerları, client ve server'ın birbirine ek bilgiler göndermesini sağlar. HTTP headerları ile ilgili detaylı bilgiyi yine kaynaklarda görebilirsiniz. Herhangi bir web sayfasına girdiğinizde, tarayıcınızın geliştirici konsolunu açarak (Google Chrome kullanıyorsanız konsolu açmak için F12 tuşuna basabilirsiniz) gönderilen ve alınan headerları inceleyebilirsiniz. Bunun için konsolunuzdaki Network sekmesine gidin ve yapılan isteklerden birini seçin. Açılan kısımda Headers sekmesinde headerlar listelenecektir.
Web
uygulaması geliştirirken request-response cycle, bir başka deyişle,
client ile server arasında isteklerin gidip cevapların gelmesi döngüsü büyük
önem taşır. Bu döngü genellikle HTTP ile gerçekleşir. Geliştiricinin kullandığı
araçlar/kütüphaneler çoğu durumda bu işlemleri otomatikleştirse de arka planda
neler gerçekleştiğinin bilinmesi yeni başlayan bir geliştiricinin (developer,
software developer) daha bilinçli hareket etmesine olanak sağlayacaktır.
Kaynaklar:
https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL
https://auth0.com/blog/url-uri-urn-differences/
https://www.cloudflare.com/learning/network-layer/what-is-a-computer-port/
https://cs.fyi/guide/http-in-depth
https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview
https://en.wikipedia.org/wiki/HTTP
https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status