22.07.2024

HTTP(S)

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:


Request'in ilk satırında gördüğünüz GET, kullanılan HTTP metodunu; /, erişilmek istenen yolu/adresi (path) ve HTTP/1.1, ise kullanılan HTTP protkolünün versiyonunu ifade ediyor. Client'ınserver'dan, nasıl bir eylem (action) gerçekleştirmek amacıyla istek yaptığı, HTTP metotları ile belirtilir. En çok kullanılan metotlar GET, POST, PATCH, DELETE PUT metotlarıdır. Bu metotların kullanım amaçlarını aşağıdaki kaynaklarda bulabilirsiniz. 
İkinci satırda Host bilgisi, üçüncü satırda da headerlar yer alıyor.

 

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

 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers