İçeriğe geç
Yazılım ve Teknoloji

Http İsteklerinin Yolculuğu: Tarayıcıdan Sunucuya Ne Oluyor

Rıfat Akarca 👁️ 27 okunma 📅 ⏱️ 7 dk okuma
İçindekiler

İnternette bir web sitesini ziyaret etmek oldukça basit görünür. Adres çubuğuna bir URL yazarsınız, Enter tuşuna basarsınız ve birkaç saniye içinde sayfa karşınıza gelir. Ancak bu kısa sürede tarayıcı, DNS sunucuları, ağ cihazları, güvenlik protokolleri ve web sunucuları arasında birçok işlem gerçekleşir.

Peki bir HTTP isteği tarayıcıdan sunucuya nasıl ulaşır? Sunucunun gönderdiği yanıt ekranda gördüğümüz web sayfasına nasıl dönüşür?

Bu yazıda HTTP isteklerinin yolculuğunu adım adım inceleyeceğiz.

HTTP isteği nedir?

HTTP, “Hypertext Transfer Protocol” ifadesinin kısaltmasıdır. Tarayıcılar ile web sunucuları arasındaki veri alışverişini düzenleyen bir iletişim protokolüdür.

Tarayıcı bir sayfayı, görseli veya API verisini almak istediğinde sunucuya bir HTTP isteği gönderir. Sunucu bu isteği işler ve bir HTTP yanıtı döndürür.

Basitleştirilmiş iletişim şu şekilde gerçekleşir:

Tarayıcı → HTTP isteği → Sunucu
Tarayıcı ← HTTP yanıtı  ← Sunucu

Günümüzde iletişimin büyük bölümü HTTP’nin şifrelenmiş sürümü olan HTTPS üzerinden gerçekleştirilir.

1. Kullanıcı URL’yi tarayıcıya girer

Süreç, kullanıcının tarayıcıya bir adres yazmasıyla başlar:

https://rifatakarca.com/blog

Bu URL birkaç bölümden oluşur:

  • https: Kullanılacak iletişim protokolü
  • rifatakarca.com: Alan adı
  • /blog: Sunucudan talep edilen kaynak veya yol

Tarayıcı, bağlantıyı kurmadan önce adresi analiz eder. Girilen adresin geçerli olup olmadığını, hangi protokolün kullanılacağını ve daha önce ziyaret edilip edilmediğini kontrol eder.

2. Tarayıcı önbelleği kontrol eder

Tarayıcı her istekte doğrudan internete çıkmak zorunda değildir. Öncelikle ihtiyaç duyulan kaynağın önbellekte bulunup bulunmadığını kontrol eder.

Daha önce ziyaret edilen bir sayfanın görselleri, CSS dosyaları veya JavaScript kaynakları tarayıcı önbelleğinde saklanmış olabilir. Bu dosyalar hâlâ geçerliyse yeniden indirilmeden kullanılabilir.

Önbellek kullanımı:

  • Sayfanın daha hızlı açılmasını sağlar.
  • Sunucunun yükünü azaltır.
  • Kullanılan internet trafiğini düşürür.

Kaynak önbellekte yoksa veya süresi dolmuşsa ağ üzerinden yeni bir istek gönderilir.

3. DNS sorgusu gerçekleştirilir

Bilgisayarlar web sitelerine alan adlarıyla değil, IP adresleriyle bağlanır. Bu nedenle rifatakarca.com gibi bir alan adının hangi IP adresine karşılık geldiğinin bulunması gerekir.

Bu işlemi DNS (Domain Name System) gerçekleştirir.

Tarayıcı ve işletim sistemi sırasıyla şu kaynakları kontrol edebilir:

  1. Tarayıcının DNS önbelleği
  2. İşletim sisteminin DNS önbelleği
  3. Modem veya yönlendirici
  4. İnternet servis sağlayıcısının DNS sunucusu
  5. Yetkili DNS sunucuları

Sorgunun sonunda alan adına ait IP adresi elde edilir:

rifatakarca.com → 203.0.113.10

DNS çözümlemesi tamamlandıktan sonra tarayıcı hangi sunucuya bağlanacağını bilir.

4. TCP bağlantısı kurulur

IP adresi belirlendikten sonra tarayıcı ile sunucu arasında bağlantı kurulması gerekir. HTTP/1.1 ve HTTP/2 bağlantılarında bu işlem genellikle TCP üzerinden gerçekleştirilir.

TCP bağlantısı kurulurken “üç aşamalı el sıkışma” adı verilen süreç kullanılır:

Tarayıcı → SYN → Sunucu
Tarayıcı ← SYN-ACK ← Sunucu
Tarayıcı → ACK → Sunucu

Bu işlem sonucunda iki taraf da veri alışverişine hazır olduğunu bildirir.

TCP; verilerin doğru sırayla, eksiksiz ve güvenilir biçimde iletilmesini sağlar. Kaybolan paketler gerektiğinde yeniden gönderilir.

HTTP/3 ise TCP yerine UDP tabanlı QUIC protokolünü kullanarak bağlantı gecikmesini azaltmayı hedefler.

5. HTTPS için TLS görüşmesi yapılır

Ziyaret edilen adres HTTPS kullanıyorsa tarayıcı ile sunucu arasında güvenli bir bağlantı oluşturulur. Bu aşama TLS görüşmesi olarak adlandırılır.

TLS sürecinde:

  • Sunucu dijital sertifikasını tarayıcıya gönderir.
  • Tarayıcı sertifikanın geçerli ve güvenilir olduğunu kontrol eder.
  • Kullanılacak şifreleme yöntemi belirlenir.
  • Güvenli oturum anahtarları oluşturulur.

Bağlantı kurulduktan sonra gönderilen veriler şifrelenir. Böylece araya giren bir kişi, kullanıcı ile sunucu arasındaki iletişimi kolayca okuyamaz veya değiştiremez.

Tarayıcıdaki kilit simgesi, bağlantının HTTPS ile şifrelendiğini gösterir. Ancak bu simge, ziyaret edilen sitenin içeriğinin mutlaka güvenilir olduğu anlamına gelmez.

6. Tarayıcı HTTP isteğini gönderir

Güvenli bağlantı oluşturulduktan sonra tarayıcı sunucuya HTTP isteğini gönderir.

Basit bir istek aşağıdaki gibi görünebilir:

GET /blog HTTP/1.1
Host: rifatakarca.com
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: tr-TR

İstek içerisinde farklı bilgiler bulunur:

  • Metot: Yapılmak istenen işlemi belirtir.
  • Yol: Talep edilen kaynağı gösterir.
  • Header alanları: Tarayıcı, içerik türü ve dil gibi ek bilgiler taşır.
  • Body: Özellikle POST ve PUT isteklerinde gönderilen verileri içerir.

Yaygın HTTP metotları şunlardır:

  • GET: Veri veya kaynak almak
  • POST: Yeni veri göndermek
  • PUT: Bir kaynağı tamamen güncellemek
  • PATCH: Bir kaynağı kısmen güncellemek
  • DELETE: Bir kaynağı silmek

Bir web sayfasını açarken çoğunlukla GET isteği kullanılır.

7. İstek internet üzerinde yol alır

HTTP isteği sunucuya doğrudan tek adımda ulaşmaz. Veri, küçük ağ paketlerine ayrılarak farklı cihazlardan geçebilir.

Yolculuk sırasında şu sistemler devreye girebilir:

  • Modem ve yönlendiriciler
  • İnternet servis sağlayıcıları
  • Güvenlik duvarları
  • CDN sunucuları
  • Yük dengeleyiciler
  • Reverse proxy sistemleri
  • DDoS koruma servisleri

Paketlerin izlediği rota ağ koşullarına göre değişebilir. TCP, paketler farklı yollardan ulaşsa bile verilerin doğru sırada birleştirilmesini sağlar.

8. CDN ve önbellek katmanları isteği karşılayabilir

Birçok web sitesi, içeriklerini kullanıcılara daha hızlı ulaştırmak için CDN kullanır. CDN, dosyaların farklı coğrafi bölgelerdeki sunucularda saklanmasını sağlar.

İstenen kaynak CDN önbelleğinde mevcutsa ana sunucuya gidilmeden kullanıcıya gönderilebilir. Özellikle görsel, video, CSS ve JavaScript dosyalarında bu yöntem önemli bir hız avantajı sağlar.

Kaynak önbellekte bulunmuyorsa CDN isteği ana sunucuya iletir ve aldığı yanıtın bir kopyasını sonraki istekler için saklayabilir.

9. Web sunucusu isteği işler

İstek hedef sisteme ulaştığında önce Nginx, Apache veya benzeri bir web sunucusu tarafından karşılanabilir.

Web sunucusu isteğin türüne göre iki farklı yol izleyebilir:

  • Statik bir dosyayı doğrudan döndürebilir.
  • İsteği uygulama sunucusuna yönlendirebilir.

Dinamik bir sayfa talep edildiğinde uygulama:

  1. İstek adresini ve metodunu inceler.
  2. Kullanıcının yetkisini kontrol edebilir.
  3. Gerekli iş kurallarını çalıştırır.
  4. Veritabanı veya başka servislerle iletişim kurar.
  5. Gönderilecek sonucu hazırlar.

Örneğin bir blog yazısı açılırken uygulama, ilgili yazıyı veritabanından alarak HTML çıktısına dönüştürebilir.

10. Sunucu HTTP yanıtını gönderir

İşlem tamamlandığında sunucu tarayıcıya bir HTTP yanıtı döndürür:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 15342
Cache-Control: public, max-age=3600

Yanıt genellikle üç temel bölümden oluşur:

  • Durum kodu: İşlemin sonucunu belirtir.
  • Header alanları: İçerik türü, önbellek ve güvenlik bilgilerini taşır.
  • Body: HTML, JSON, görsel veya başka bir içeriği barındırır.

Yaygın HTTP durum kodları:

  • 200 OK: İstek başarıyla tamamlandı.
  • 201 Created: Yeni kaynak oluşturuldu.
  • 301 Moved Permanently: Kaynak kalıcı olarak taşındı.
  • 400 Bad Request: İstek hatalıydı.
  • 401 Unauthorized: Kimlik doğrulaması gerekiyor.
  • 403 Forbidden: Kaynağa erişim izni yok.
  • 404 Not Found: Kaynak bulunamadı.
  • 500 Internal Server Error: Sunucuda beklenmeyen bir hata oluştu.
  • 503 Service Unavailable: Hizmet geçici olarak kullanılamıyor.

11. Tarayıcı sayfayı oluşturmaya başlar

Tarayıcı HTML yanıtını aldığında sayfayı hemen görüntülemeye başlamaz. Öncelikle içeriği analiz eder ve DOM ağacını oluşturur.

Ardından HTML içerisindeki ek kaynakları keşfeder:

<link rel="stylesheet" href="/style.css">
<script src="/app.js"></script>
<img src="/images/http-request.png" alt="HTTP isteğinin yolculuğu">

Bu kaynakların her biri için yeni HTTP istekleri gönderilebilir.

Tarayıcı genel olarak şu işlemleri gerçekleştirir:

  1. HTML içeriğinden DOM ağacını oluşturur.
  2. CSS kurallarını analiz eder.
  3. Sayfa düzenini hesaplar.
  4. Görsel öğeleri ekrana çizer.
  5. JavaScript kodlarını çalıştırır.
  6. Sonradan ihtiyaç duyulan veriler için API istekleri gönderir.

Bu nedenle tek bir web sayfasının açılması, yalnızca bir HTTP isteğinden oluşmaz. Modern bir sayfa onlarca, hatta yüzlerce istek gerçekleştirebilir.

HTTP isteğinin yolculuğu ne kadar sürer?

Toplam süre birçok bileşenin birleşiminden oluşur:

DNS çözümleme
+ bağlantı kurulması
+ TLS görüşmesi
+ ağ gecikmesi
+ sunucu işlem süresi
+ dosyaların indirilmesi
+ tarayıcının sayfayı oluşturması

Kullanıcıya hızlı bir deneyim sunmak için her aşamanın optimize edilmesi gerekir.

Başlıca performans iyileştirmeleri şunlardır:

  • DNS sorgularını azaltmak
  • CDN kullanmak
  • HTTP/2 veya HTTP/3 desteği sağlamak
  • Sunucu yanıt süresini düşürmek
  • Önbellek kurallarını doğru yapılandırmak
  • Görselleri sıkıştırmak
  • CSS ve JavaScript dosyalarını küçültmek
  • Gereksiz HTTP isteklerini kaldırmak
  • Veritabanı sorgularını optimize etmek

HTTP/1.1, HTTP/2 ve HTTP/3 arasındaki fark

HTTP protokolü zaman içinde performans ihtiyaçlarına göre gelişmiştir.

HTTP/1.1

Uzun yıllar webin temel protokolü olmuştur. Aynı bağlantı üzerinden birden fazla istek desteklese de isteklerin sıraya girmesi performans sorunlarına neden olabilir.

HTTP/2

Bir bağlantı üzerinden aynı anda birden fazla isteğin taşınmasını sağlar. Header sıkıştırma gibi geliştirmelerle bağlantının daha verimli kullanılmasına yardımcı olur.

HTTP/3

TCP yerine QUIC kullanır. Özellikle bağlantı kurulması ve paket kaybı yaşanan ağlarda gecikmeyi azaltabilir. Mobil bağlantılar gibi ağ değişikliklerinin sık yaşandığı ortamlarda avantaj sağlayabilir.

Sonuç

Bir web sayfasının açılması, kullanıcı açısından tek bir tıklamadan ibaret görünür. Arka planda ise DNS çözümleme, bağlantı kurma, TLS şifrelemesi, HTTP mesajlaşması, sunucu işlemleri ve tarayıcı çizimi gibi birçok aşama bulunur.

HTTP isteklerinin yolculuğunu anlamak; web geliştiricilerin performans sorunlarını çözmesine, güvenlik mekanizmalarını doğru yapılandırmasına ve daha hızlı uygulamalar geliştirmesine yardımcı olur.

Bir sonraki kez bir URL yazıp Enter tuşuna bastığınızda, saniyeler içinde tamamlanan bu yolculuğun arkasında oldukça kapsamlı bir sistemin çalıştığını hatırlayabilirsiniz.

Sıkça Sorulan Sorular

HTTP ile HTTPS arasındaki fark nedir?

HTTPS, HTTP iletişimini TLS kullanarak şifreler. Böylece tarayıcı ile sunucu arasında aktarılan bilgilerin üçüncü kişiler tarafından okunması veya değiştirilmesi zorlaşır.

Bir web sayfası açılırken kaç HTTP isteği gönderilir?

Bu sayı sayfanın yapısına bağlıdır. HTML dosyasına ek olarak her CSS, JavaScript, görsel, font ve API çağrısı ayrı bir istek oluşturabilir.

DNS neden gereklidir?

DNS, insanların kullandığı alan adlarını cihazların bağlantı kurabileceği IP adreslerine dönüştürür.

Sunucu yanıt süresi nedir?

Tarayıcının isteği göndermesi ile sunucudan ilk yanıtın gelmesi arasındaki sürenin önemli bir bölümüdür. Sunucu kapasitesi, uygulama kodu, veritabanı sorguları ve ağ mesafesi bu süreyi etkileyebilir.

HTTP durum kodları ne işe yarar?

Durum kodları, isteğin sonucunu tarayıcıya veya istemciye bildirir. Örneğin 200 başarıyı, 404 kaynağın bulunamadığını, 500 ise sunucu kaynaklı bir hatayı ifade eder.

API istekleri de HTTP kullanır mı?

Evet. REST API’ler başta olmak üzere birçok web servisi veri alışverişi için HTTP veya HTTPS kullanır. Yanıtlar çoğunlukla JSON formatında gönderilir.