HTTP Protokolü

İster bir web uygulaması geliştirin, ister bir IoT cihazından bulut sunucusuna veri aktarın, internet mimarisinin kalbinde aynı protokol yer alır: HTTP (Hypertext Transfer Protocol). Uygulama katmanında (Application Layer) çalışan bu protokol, istemci (client) ile sunucu (server) arasındaki veri alışverişinin kurallarını belirler.

Bu yazıda HTTP protokolünün istek/yanıt (Request/Response) yapısını, durum kodlarını, başlık (Header) mimarisini ve HTTP/1.1’den HTTP/3’e uzanan evrimini inceliyoruz.

1. HTTP Çalışma Mantığı: İstek ve Yanıt Döngüsü

HTTP, İstek-Yanıt (Request-Response) modeline dayalı, bağlantısız ve durumsuz (Stateless) bir protokoldür.

  • Stateless (Durumsuz) Ne Demek?: Sunucu, gelen her isteği bir öncekinden tamamen bağımsız, yepyeni bir işlem olarak görür. Geçmiş isteklerin bilgisini hafızada tutmaz. Bu durum Session, Cookie ve Token (JWT) gibi mekanizmaların doğuş sebebidir.

Temel HTTP Metotları (Request Methods)

İstemci, sunucuya ne yapmak istediğini belirtmek için belirli fiiller (metotlar) kullanır:

  • GET: Sunucudan veri okumak/getirmek için kullanılır. Gövdesi (Body) yoktur, parametreler URL içinde taşınır.
  • POST: Sunucuya yeni bir veri göndermek (kayıt oluşturmak) için kullanılır. Veri, isteğin gövdesinde (Body) güvenli bir şekilde taşınır.
  • PUT: Sunucudaki mevcut bir veriyi tamamen güncellemek/değiştirmek için kullanılır.
  • PATCH: Sunucudaki verinin sadece belirli bir kısmını (örneğin sadece e-posta adresini) güncellemek için kullanılır.
  • DELETE: Sunucudaki belirtilen kaynağı siler.

2. Bir HTTP Paketinin Anatomisi

Ağ üzerinde akan bir HTTP paketi, insan tarafından okunabilir (human-readable) düz metin yapılarından oluşur.

A. HTTP İstek (Request) Yapısı

İstemcinin (Tarayıcı, Postman veya bir ESP32) sunucuya gönderdiği paket şu üç ana bölümden oluşur:

HTTP

POST /api/v1/sensor-data HTTP/1.1
Host: iofe.com.tr
Content-Type: application/json
Authorization: Bearer ax9382...

{
  "device_id": "esp32_node_01",
  "temperature": 24.5,
  "humidity": 60
}
  • Request Line (İstek Satırı): Metot (POST), hedef dizin (/api/v1/sensor-data) ve protokol versiyonu (HTTP/1.1) yer alır.
  • Headers (Başlıklar): İstekle ilgili meta verilerdir. Sunucuya hangi formatta veri gönderildiği (Content-Type) veya yetkilendirme anahtarı (Authorization) burada iletilir.
  • Body (Gövde): Sunucuya gönderilecek asıl veriyi (JSON, XML veya form verisi) barındırır.

B. HTTP Yanıt (Response) Yapısı

Sunucunun istemciye döndüğü paketin yapısı da benzerdir:

HTTP

HTTP/1.1 200 OK
Date: Sun, 14 Jun 2026 15:00:00 GMT
Content-Type: application/json
Content-Length: 31

{"status": "success", "code": 200}
  • Status Line (Durum Satırı): Protokol versiyonu ve işlemin sonucunu bildiren HTTP Durum Kodu (200 OK) yer alır.
  • Headers (Başlıklar): Yanıtı veren sunucu bilgisi, veri tipi ve tarih gibi meta verilerdir.
  • Body (Gövde): İstemcinin talep ettiği HTML sayfası, görsel veya API’den dönen JSON çıktısıdır.

3. HTTP Durum Kodları (Status Codes) ve Anlamları

Sunucunun verdiği 3 haneli yanıt kodları, işlemin kaderini belirler. Sektör standardı olarak 5 ana gruba ayrılırlar:

Kod AralığıSınıfıTanımıSık Karşılaşılan Örnekler
1xxBilgilendirmeİstek alındı, işlem devam ediyor.101 Switching Protocols (WebSocket geçişlerinde)
2xxBaşarıİstek başarıyla alındı ve işlendi.200 OK, 201 Created (Yeni kayıt oluşturuldu)
3xxYönlendirmeİstenen kaynak başka bir adrese taşındı.301 Moved Permanently, 304 Not Modified (Önbellek)
4xxİstemci Hatasıİstekte hata var (Yanlış URL, eksik yetki vb.)400 Bad Request, 401 Unauthorized, 404 Not Found
5xxSunucu Hatasıİstek doğru ancak sunucu tarafında hata oluştu.500 Internal Server Error, 502 Bad Gateway

4. HTTP’nin Evrimi: HTTP/1.1, HTTP/2 ve HTTP/3

Web teknolojilerinin hızlanması ihtiyacı, HTTP protokolünün altyapısını zamanla ciddi şekilde değiştirdi:

HTTP/1.1 (1997)

Her bir görsel, CSS veya JS dosyası için sunucuyla ayrı bir TCP bağlantısı açılması gerekiyordu. Bu durum Head-of-Line (HOL) Blocking adı verilen hat tıkanmalarına yol açıyordu.

HTTP/2 (2015)

Aynı TCP bağlantısı üzerinden birden fazla isteğin ve yanıtın aynı anda taşınabilmesini sağlayan Multiplexing mimarisi geldi. Veriler artık düz metin olarak değil, sıkıştırılmış ikili (binary) frameler halinde taşınmaya başladı.

HTTP/3 (2022+)

Fiziksel katmanda TCP’nin getirdiği el sıkışma (handshake) gecikmelerini ve bağlantı kopmalarını engellemek amacıyla, TCP tamamen terk edildi. HTTP/3, UDP tabanlı QUIC protokolü üzerine inşa edildi. Mobil ağlar arasında (Wi-Fi’dan hücresel veriye geçerken) bağlantının kopmadan devam etmesini sağlar.

5. Sahada Troubleshooting: HTTP Hataları Nasıl Çözülür?

Sistem mimarisinde bir HTTP hatası aldığınızda, sorunun kaynağını izole etmek için şu adımları izleyin:

  1. 401 mi, 403 mü?: 401 Unauthorized alıyorsanız sorun Token/Auth başlığının eksik veya geçersiz olmasıdır. 403 Forbidden alıyorsanız, kimliğiniz doğrulanmıştır ancak o dizine veya API uç noktasına erişim yetkiniz (role/permission) yoktur.
  2. 502 Bad Gateway / 504 Gateway Timeout: Bu hatalar genellikle uygulamanızın (FastAPI, Express vb.) çöktüğünü veya arkadaki servislerin (Docker container’ları) Nginx/Nginx Proxy Manager gibi ters proxy (Reverse Proxy) sunucularına yanıt veremediğini gösterir. Container loglarını inceleyin.
  3. CORS Hatası (Cross-Origin Resource Sharing): Tarayıcı konsolunda kırmızı CORS hatası görüyorsanız, frontend uygulamanızın çalıştığı domain (örn: localhost:3000), backend sunucusu tarafından güvenli kaynak olarak tanımlanmamıştır. Çözüm backend kodunda Allow-Origin başlıklarına frontend domainini eklemektir.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir