HTTP Nedir? Tarayıcıya Adres Yazınca Arka Planda Neler Olur
İçindekiler
- Kısaca: Adres yazınca hangi adımlar yaşanır?
- HTTP nedir?
- Tarayıcıya adres yazınca ilk ne olur?
- HTTP ile HTTPS arasındaki fark nedir?
- Tarayıcı sunucuya ne gönderir?
- Sunucu nasıl cevap verir?
- HTTP isteğini kendim nasıl görebilirim?
- PHP ile HTTP isteği nasıl gönderilir?
- C# ile HTTP isteği nasıl gönderilir?
- Web sayfası ekrana nasıl gelir, tek istek yeterli mi?
- Sahada en sık hangi HTTP hatalarıyla karşılaşılır?
- 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?
- Tarayıcı adresi (URL) parçalarına ayırır: protokol, alan adı, yol.
- DNS sorgusu ile alan adının IP adresi bulunur.
- Sunucuyla TCP bağlantısı kurulur; adres https ile başlıyorsa TLS ile şifreli kanal açılır.
- Tarayıcı HTTP isteğini gönderir.
- Sunucu isteği işler ve durum kodu, başlıklar ve gövdeden oluşan cevabı döndürür.
- Tarayıcı HTML içeriğini okur, CSS, JavaScript, görsel ve font dosyaları için ek istekler gönderir.
- 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.

0 Yorum