Teknoloji, Bilim ve Akıl
HTTP Nedir? Tarayıcıya Adres Yazınca Arka Planda Neler Olur
Web Programlama

HTTP Nedir? Tarayıcıya Adres Yazınca Arka Planda Neler Olur

6 dk okuma 9 okunma 0 yorum
Kısaca: HTTP, tarayıcı ile web sunucusu arasındaki istek ve cevap alışverişinin kurallarını belirleyen protokoldür. Adres yazıldığında önce DNS ile IP adresi bulunur, sonra istek gönderilir ve dönen cevap tarayıcıda sayfaya dönüştürülür.
İçindekiler
  1. Kısaca: Adres yazınca hangi adımlar yaşanır?
  2. HTTP nedir?
  3. Tarayıcıya adres yazınca ilk ne olur?
  4. HTTP ile HTTPS arasındaki fark nedir?
  5. Tarayıcı sunucuya ne gönderir?
  6. Sunucu nasıl cevap verir?
  7. HTTP isteğini kendim nasıl görebilirim?
  8. PHP ile HTTP isteği nasıl gönderilir?
  9. C# ile HTTP isteği nasıl gönderilir?
  10. Web sayfası ekrana nasıl gelir, tek istek yeterli mi?
  11. Sahada en sık hangi HTTP hatalarıyla karşılaşılır?
  12. HTTP neden öğrenilmeli?

HTTP (Hypertext Transfer Protocol), tarayıcı ile web sunucusunun birbiriyle nasıl konuşacağını belirleyen kurallar bütünüdür. Tarayıcıya bir adres yazıp Enter tuşuna bastığınızda sırasıyla şunlar olur: alan adı DNS ile IP adresine çevrilir, sunucuyla bağlantı kurulur, bir HTTP isteği gönderilir, sunucu bir HTTP cevabı döndürür ve tarayıcı bu cevabı işleyerek sayfayı ekrana çizer.

Bu yazıda süreci adım adım açıyoruz. Her adımı komut satırından, PHP ve C# ile nasıl gözlemleyebileceğinizi de örnek kodlarla gösteriyoruz.

Kısaca: Adres yazınca hangi adımlar yaşanır?

  1. Tarayıcı adresi (URL) parçalarına ayırır: protokol, alan adı, yol.
  2. DNS sorgusu ile alan adının IP adresi bulunur.
  3. Sunucuyla TCP bağlantısı kurulur; adres https ile başlıyorsa TLS ile şifreli kanal açılır.
  4. Tarayıcı HTTP isteğini gönderir.
  5. Sunucu isteği işler ve durum kodu, başlıklar ve gövdeden oluşan cevabı döndürür.
  6. Tarayıcı HTML içeriğini okur, CSS, JavaScript, görsel ve font dosyaları için ek istekler gönderir.
  7. Sayfa ekrana çizilir.

HTTP nedir?

HTTP, Türkçeye Hiper Metin Aktarım Protokolü olarak çevrilir. İsim pek bir şey anlatmasa da mantığı basittir: bir taraf ister, diğer taraf cevap verir. İsteyen tarafa istemci (çoğunlukla tarayıcı), cevap veren tarafa sunucu denir.

HTTP metin tabanlı bir protokoldür. Yani tarayıcının sunucuya gönderdiği isteği ve sunucunun verdiği cevabı çıplak gözle okuyabilirsiniz. Bu özellik, hata ayıklarken büyük kolaylık sağlar.

HTTP aynı zamanda durumsuz bir protokoldür. Sunucu her isteği bir öncekinden bağımsız değerlendirir. Giriş yapmış kullanıcıyı hatırlamak için çerez (cookie) ve oturum (session) gibi ek mekanizmalar bu yüzden vardır.

Tarayıcıya adres yazınca ilk ne olur?

İlk adım sunucuya bağlanmak değil, sunucunun adresini bulmaktır. Bilgisayarlar birbirine alan adlarıyla değil IP adresleriyle ulaşır. Alan adını IP adresine çeviren sistem DNS (Domain Name System) olarak adlandırılır ve internetin telefon rehberi gibi çalışır.

Tarayıcı önce kendi önbelleğine, sonra işletim sisteminin önbelleğine bakar. Kayıt yoksa DNS sunucusuna sorar. Bu sorguyu kendiniz de yapabilirsiniz:

nslookup example.com

Komut, alan adının karşılık geldiği IP adresini döndürür. Bir site sizde açılmıyor ama başkasında açılıyorsa ilk bakılacak yer çoğunlukla burasıdır. Windows üzerinde DNS önbelleğini temizlemek için şu komut kullanılır:

ipconfig /flushdns

HTTP ile HTTPS arasındaki fark nedir?

HTTPS, HTTP protokolünün TLS ile şifrelenmiş halidir. İstek ve cevap yapısı aynıdır; fark, verinin yolda okunamaz ve değiştirilemez hale gelmesidir. Kullanıcı adı, şifre ve kart bilgisi gibi veriler taşınıyorsa HTTPS zorunlu kabul edilmelidir.

Özellik HTTP HTTPS
Varsayılan port 80 443
Şifreleme Yok TLS ile var
Sertifika gereksinimi Yok Var
Tarayıcı uyarısı Güvenli değil ibaresi Uyarı yok
Arama motoru etkisi Olumsuz Olumlu

Pratikte bir siteyi HTTPS üzerine taşırken en sık unutulan şey, HTTP adreslerinin 301 ile HTTPS adresine yönlendirilmesidir. Yönlendirme yapılmazsa aynı sayfa iki farklı adresten açılır ve arama motorları bunu yinelenen içerik olarak görebilir.

Tarayıcı sunucuya ne gönderir?

Tarayıcının gönderdiği pakete istek (request) denir. Bir istek üç bölümden oluşur: istek satırı, başlıklar ve gerekiyorsa gövde. Sadeleştirilmiş bir örnek şöyledir:

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

İlk satırdaki GET metodu, sunucudan ne istendiğini belirtir. En çok kullanılan metotlar şunlardır:

Metot Amaç Tipik örnek
GET Kaynağı okumak Bir sayfayı veya ürün listesini açmak
POST Sunucuya veri göndermek Giriş formu, yeni kayıt oluşturmak
PUT Kaynağı bütünüyle güncellemek Bir ürün kaydını yeniden yazmak
PATCH Kaynağın bir kısmını güncellemek Sadece fiyat alanını değiştirmek
DELETE Kaynağı silmek Bir yorumu kaldırmak

Önemli bir kural: GET isteği sunucuda veri değiştirmemelidir. Silme işlemini GET ile çalışan bir bağlantıya bağlarsanız, bir arama motoru botu veya tarayıcının ön yükleme özelliği o bağlantıyı ziyaret ettiğinde kayıtlarınız silinebilir.

Sunucu nasıl cevap verir?

Sunucunun döndürdüğü pakete cevap (response) denir. Cevap da üç bölümdür: durum satırı, başlıklar ve gövde. Gövdede çoğunlukla HTML, JSON veya bir dosya bulunur.

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

<!DOCTYPE html>
<html lang="tr">
...

Durum satırındaki üç haneli sayı, isteğin sonucunu özetler. Kodun ilk hanesi hangi gruba ait olduğunu söyler:

Grup Anlamı Sık görülen kodlar
2xx Başarılı 200 Tamam, 201 Oluşturuldu, 204 İçerik yok
3xx Yönlendirme 301 Kalıcı, 302 Geçici, 304 Değişmedi
4xx İstekte sorun 400 Hatalı istek, 401 Yetkisiz, 403 Yasak, 404 Bulunamadı
5xx Sunucuda sorun 500 Sunucu hatası, 502 Hatalı ağ geçidi, 503 Hizmet yok

Hata ayıklarken bu ayrım işinizi hızlandırır. 4xx görüyorsanız sorunu gönderdiğiniz istekte, 5xx görüyorsanız sunucu tarafındaki kodda veya yapılandırmada arayın.

HTTP isteğini kendim nasıl görebilirim?

En hızlı yol tarayıcının geliştirici araçlarıdır. F12 tuşuna basıp Ağ (Network) sekmesini açın ve sayfayı yenileyin. Her satır bir HTTP isteğidir; üzerine tıkladığınızda başlıkları, durum kodunu ve süreyi görürsünüz.

Komut satırında ise curl kullanılır. Sadece cevap başlıklarını görmek için:

curl -I https://example.com

İsteğin ve cevabın tamamını, bağlantı adımlarıyla birlikte görmek için:

curl -v https://example.com

PHP ile HTTP isteği nasıl gönderilir?

PHP tarafında en yaygın yöntem cURL eklentisidir. Aşağıdaki örnek bir adrese GET isteği gönderir, durum kodunu ve gövdeyi alır:

<?php
$ch = curl_init('https://example.com/api/urunler');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json']);

$govde = curl_exec($ch);
$durum = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$hata  = curl_error($ch);
curl_close($ch);

if ($govde === false) {
    echo 'Bağlantı hatası: ' . $hata;
} elseif ($durum === 200) {
    $veri = json_decode($govde, true);
    print_r($veri);
} else {
    echo 'Beklenmeyen durum kodu: ' . $durum;
}

Zaman aşımı değerini mutlaka belirleyin. Karşı sunucu cevap vermediğinde zaman aşımı tanımlı olmayan bir istek, kendi sayfanızın da dakikalarca askıda kalmasına yol açar.

C# ile HTTP isteği nasıl gönderilir?

C# tarafında HttpClient sınıfı kullanılır. Bu sınıfın her istekte yeniden oluşturulması yerine uygulama boyunca tek bir örneğinin paylaşılması önerilir:

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static readonly HttpClient istemci = new HttpClient
    {
        Timeout = TimeSpan.FromSeconds(10)
    };

    static async Task Main()
    {
        HttpResponseMessage cevap =
            await istemci.GetAsync("https://example.com/api/urunler");

        Console.WriteLine((int)cevap.StatusCode);

        if (cevap.IsSuccessStatusCode)
        {
            string govde = await cevap.Content.ReadAsStringAsync();
            Console.WriteLine(govde);
        }
    }
}

Web sayfası ekrana nasıl gelir, tek istek yeterli mi?

Hayır, tek istek neredeyse hiçbir zaman yetmez. İlk istekle yalnızca HTML belgesi gelir. Tarayıcı bu belgeyi okurken içinde geçen her CSS, JavaScript, görsel ve font dosyası için ayrı bir istek gönderir.

  • HTML sayfanın iskeletini oluşturur.
  • CSS renkleri, yerleşimi ve görünümü belirler.
  • JavaScript sayfanın davranışını ve etkileşimini yönetir.

Yavaş bağlantıda önce yazıların, sonra görsellerin gelmesinin, en son da butonların çalışmaya başlamasının nedeni budur. Ekranda gördüğünüz şey sunucudan hazır gelen bir resim değildir; tarayıcı parçaları tek tek toplayıp sayfayı kendisi kurar.

Bu yüzden sayfa hızını artırmanın en etkili yollarından biri istek sayısını ve boyutunu azaltmaktır. Dosyaları birleştirmek, görselleri sıkıştırmak ve önbellek başlıklarını doğru ayarlamak doğrudan bu amaca hizmet eder.

Sahada en sık hangi HTTP hatalarıyla karşılaşılır?

  • Yönlendirme döngüsü: HTTP adresi HTTPS adresine, HTTPS adresi tekrar HTTP adresine yönlenir. Tarayıcı çok fazla yönlendirme uyarısı verir. Çoğunlukla sunucu ayarı ile uygulama ayarı birbiriyle çelişiyordur.
  • Karışık içerik: Sayfa HTTPS ile açılır ama içindeki bir görsel veya betik HTTP ile çağrılır. Tarayıcı bu kaynağı engeller.
  • Hatalı durum kodu: Bulunamayan sayfa için 200 döndürmek sık yapılan bir hatadır. Arama motorları boş sayfayı geçerli içerik sanar. Olmayan sayfa mutlaka 404 döndürmelidir.
  • Eski önbellek: Dosyayı güncellediniz ama ziyaretçi eskisini görüyor. Dosya adına sürüm numarası eklemek en pratik çözümdür.
  • 500 hatasında boş ekran: Ayrıntı tarayıcıda değil sunucunun hata günlüğündedir. İlk bakılacak yer günlük dosyasıdır.

HTTP neden öğrenilmeli?

Web üzerindeki işlemlerin neredeyse tamamı istek ve cevap alışverişine dayanır. Bir sayfayı açmak, bir API üzerinden veri çekmek, form göndermek veya mobil uygulamadan sipariş vermek aynı mekanizmayı kullanır.

HTTP mantığını bilen bir geliştirici, sorunun istemcide mi, ağda mı yoksa sunucuda mı olduğunu dakikalar içinde ayırt edebilir. Çerezler, önbellek, vekil sunucular, yük dengeleyiciler ve HTTP/2 ile HTTP/3 gibi yeni sürümler de bu temelin üzerine kuruludur.

Temel fikir her zaman aynıdır: istek gönder, cevabı al.

Sık Sorulan Sorular

HTTP ile HTTPS arasındaki temel fark nedir?
HTTPS, HTTP protokolünün TLS ile şifrelenmiş sürümüdür. İstek ve cevap yapısı aynıdır, ancak veri yolda okunamaz ve değiştirilemez. HTTP varsayılan olarak 80, HTTPS ise 443 numaralı portu kullanır.
GET ile POST arasındaki fark nedir?
GET sunucudan veri okumak için kullanılır ve parametreler adres satırında taşınır. POST sunucuya veri göndermek için kullanılır ve veri istek gövdesinde taşınır. Şifre gibi hassas bilgiler GET ile gönderilmemelidir, çünkü adres satırı tarayıcı geçmişine ve sunucu günlüklerine kaydedilir.
404 ve 500 hata kodları ne anlama gelir?
404, istenen kaynağın sunucuda bulunamadığını gösterir; çoğunlukla adres yanlıştır veya sayfa kaldırılmıştır. 500 ise sunucunun isteği işlerken beklenmeyen bir hatayla karşılaştığını gösterir; neden çoğunlukla kod hatası veya yapılandırma sorunudur.
DNS olmadan bir siteye girilebilir mi?
Teknik olarak IP adresini doğrudan yazarak sunucuya ulaşabilirsiniz. Ancak aynı IP adresinde birden fazla site barındırılıyorsa sunucu hangi siteyi istediğinizi bilemez ve çoğu zaman beklediğiniz sayfa açılmaz. Sertifikalar da alan adına göre düzenlendiği için güvenlik uyarısı alırsınız.
HTTP durumsuz ise siteler giriş yaptığımı nasıl hatırlıyor?
Sunucu giriş sonrasında tarayıcıya bir çerez gönderir. Tarayıcı bu çerezi sonraki her isteğe otomatik olarak ekler. Sunucu çerezdeki oturum kimliğine bakarak isteğin kime ait olduğunu anlar.
HTTP/2 ve HTTP/3 ne getiriyor?
İstek ve cevap mantığı değişmez; değişen taşıma biçimidir. HTTP/2 tek bağlantı üzerinden birden fazla isteği aynı anda taşır. HTTP/3 ise TCP yerine UDP tabanlı QUIC protokolünü kullanarak bağlantı kurulumunu hızlandırır ve paket kaybından daha az etkilenir.
Ramazan Yeşildal
Ramazan Yeşildal

Karaman merkezli bilgi teknolojileri yöneticisi ve bağımsız yazılım geliştirici.

0 Yorum

Yorum yazın

E-posta adresiniz yayınlanmaz. Yorumlar onaydan sonra görünür.