HTTP/0.9 (1991) - "One-line Protocol"
Temel Özellikler
- Tek Metod: GET - Sadece GET isteği yapılabiliyordu
- Tek Döküman Tipi: HTML - Yalnızca HTML dosyaları alınabiliyordu
- Başlıksız İletişim - HTTP header kavramı yoktu
-
Tek Satır İstek -
GET /sayfa.htmlformatında - Durum Kodu Yok - Başarı/hata bilgisi yoktu
- Versiyon Belirtme Yok - HTTP/0.9 yazılmıyordu bile
Bağlantı Modeli
- Her istek için yeni TCP bağlantısı açılıp kapatılıyordu
- İstek → Yanıt → Bağlantı kapat
HTTP/1.0 (1996) - RFC 1945
Yeni Özellikler
1. HTTP Metodları
- POST: Form verileri ve içerik gönderme
- HEAD: Sadece başlık bilgisi alma (içerik olmadan): HEAD isteği, sunucudan yalnızca yanıt başlıklarını (headers) alır; sayfanın veya kaynağın asıl içeriğini (body) almaz. Bir dosyanın tamamını (örneğin 10 GB'lık bir video) indirmeden sadece onun hakkında bilgi almak istediğinizde kullanılır. Bu, muazzam bir bant genişliği tasarrufu sağlar.
- GET metodu devam etti
2. HTTP Headers (Başlıklar)
-
Request Headers: İstemci bilgisi gönderme
-
User-Agent: Tarayıcı bilgisi -
Accept: Kabul edilen içerik tipleri -
Authorization: Kimlik doğrulama
-
-
Response Headers: Sunucu bilgisi alma
-
Content-Type: İçerik tipi (text/html, image/jpeg) -
Content-Length: İçerik boyutu -
Date: Yanıt tarihi -
Server: Sunucu yazılımı
-
3. Durum Kodları (Status Codes)
- 1xx: Bilgilendirme
- 2xx: Başarı (200 OK)
- 3xx: Yönlendirme (301 Moved, 302 Found)
- 4xx: İstemci Hataları (404 Not Found, 403 Forbidden)
- 5xx: Sunucu Hataları (500 Internal Server Error)
4. Versiyon Belirtme
-
İstekte
HTTP/1.0belirtilmeye başlandı - Geriye uyumluluk için önemliydi
5. MIME Türü Desteği
- Çoklu medya tipi desteği
- Resim, video, ses, PDF gibi dosyalar gönderilebilir oldu
-
Content-Typeile dosya tipi bildirildi
6. Karakter Kodlama
-
Content-Type: text/html; charset=utf-8şeklinde kodlama belirtme
Eksikleri
- Her istek hala yeni bağlantı gerektiriyordu. Tüm network adımlarının tekrardan yapılması.
- Performans sorunu vardı (connection overhead)
HTTP/1.1 (1997/1999) - RFC 2068/2616
Devrim Niteliğinde Özellikler
1. Persistent Connections (Kalıcı Bağlantılar)
- Keep-Alive: Tek bağlantı üzerinden çoklu istek,
-
Varsayılan olarak aktif (
Connection: keep-alive) - TCP bağlantı kurma maliyetini azalttı
-
Connection: closeile kapatılabilir
2. HTTP Pipelining
- Birden fazla isteği beklemeden arka arkaya gönderme
- Yanıtlar sırayla dönmek zorunda (FIFO)
- Pratikte tarayıcılar çok kullanmadı (sorunlar nedeniyle)
3. Host Header (Zorunlu)
- Sanal sunucu desteği
- Tek IP'de çoklu domain barındırma
GET /index.html HTTP/1.1 Host: ornek.com
4. Yeni HTTP Metodları
- PUT: Kaynak oluşturma/güncelleme
- DELETE: Kaynak silme
- OPTIONS: Sunucu yeteneklerini öğrenme
- TRACE: İstek yolunu izleme (debug)
- CONNECT: Proxy için tünel oluşturma
5. Chunked Transfer Encoding
- İçerik boyutu bilinmeden parça parça gönderim
- Streaming için ideal
-
Transfer-Encoding: chunked
5\r\n Merhaba\r\n 6\r\n Dünya!\r\n 0\r\n \r\n
6. Gelişmiş Cache Mekanizması
- ETag: İçerik versiyonlama
- If-Modified-Since: Koşullu istekler
- If-None-Match: ETag ile doğrulama
-
Cache-Control: Detaylı önbellek yönetimi
-
max-age,no-cache,no-store,public,private
-
7. Range Requests (Partial Content)
- Dosyanın bir bölümünü indirme
- Download resume özelliği, yarım kalan bir dosya indirme işlemine kaldığı yerden devam edebilme özelliğidir. HTTP/1.1 ile gelen Range Requests sayesinde mümkün olur.
-
Range: bytes=0-1023 -
206 Partial Contentyanıtı
8. Content Negotiation
- Accept-Language: Dil tercihi
- Accept-Encoding: Sıkıştırma tercihi (gzip, deflate)
- Accept-Charset: Karakter seti tercihi
- Sunucu en uygun içeriği döner
9. Transfer Encoding
-
gzip,compress,deflatesıkıştırma - Bandwidth tasarrufu
10. Digest Authentication
- Basic Auth'tan daha güvenli
- Şifre hash'lenerek gönderilir
Sorunları
- Head-of-Line Blocking: Bir istek yavaşsa diğerleri bekler
- Header Overhead: Her istekte tekrar eden başlıklar
- TCP Limitasyonu: TCP'nin kendi blocking sorunları
HTTP/2 (2015) - RFC 7540
Paradigma Değişimi
1. Binary Protocol (İkili Protokol)
- Metin yerine ikili format
- Parse etme daha hızlı ve hatasız
- Frames ve streams yapısı
Frame Types: - HEADERS: Başlık bilgileri - DATA: Veri içeriği - SETTINGS: Bağlantı ayarları - WINDOW_UPDATE: Akış kontrolü - PRIORITY: Önceliklendirme
2. Multiplexing (Çoğullama)
- Tek TCP bağlantısı üzerinde paralel istekler
- Her istek bir "stream" ID'si alır
- Yanıtlar sırasız gelebilir (interleaved)
- Head-of-line blocking çözüldü (HTTP seviyesinde)
3. Stream Prioritization (Önceliklendirme)
- Her stream'e ağırlık (weight) atanabilir
- Dependency tree oluşturma
- Kritik kaynaklar önce yüklenebilir
Stream 1 (HTML): Weight 256, Parent: 0 Stream 3 (CSS): Weight 220, Parent: 1 Stream 5 (JS): Weight 220, Parent: 1 Stream 7 (Image): Weight 32, Parent: 1
4. Server Push
- Sunucu istek beklemeden kaynak gönderebilir
- İstemci henüz talep etmediği kaynakları push edebilir
- Örnek: HTML gönderilirken CSS ve JS de push edilir
PUSH_PROMISE frame ile bildirim
5. Header Compression (HPACK)
- Başlıkları sıkıştırma algoritması
- Statik tablo: Yaygın başlıklar için
- Dinamik tablo: Önceki başlıkları referans alma
- %85-95 arası boyut azaltma
Sıkıştırılmamış: 800 bytes HPACK ile: 100 bytes
6. Flow Control (Akış Kontrolü)
- Stream ve bağlantı seviyesinde kontrol
- Receiver buffer overflow önleme
-
WINDOW_UPDATEframe'leri ile yönetim
7. Stream Reset
- İstemci/sunucu stream'i iptal edebilir
-
RST_STREAMframe - Tüm bağlantıyı kapatmadan iptal
8. HTTPS Zorunluluğu (Pratikte)
- Tarayıcılar sadece TLS üzerinden destekler
- Güvenlik artışı
9. ALPN (Application-Layer Protocol Negotiation)
- TLS handshake sırasında protokol seçimi
- HTTP/1.1 veya HTTP/2 anlaşması
Sorunları
- TCP Head-of-Line Blocking: TCP seviyesinde hala var
- Paket kaybında tüm stream'ler etkilenir
- Connection Migration: IP değişirse bağlantı kopar
HTTP/3 (2022) - RFC 9114
QUIC Temelli Yenilik
1. QUIC Transport Protokolü
- UDP tabanlı: TCP yerine UDP kullanır
- TCP'nin head-of-line blocking'i ortadan kalkar
- Kullanıcı alanında (userspace) çalışır
- Kernel güncellemesi gerektirmez
2. 0-RTT Connection Establishment
- İlk bağlantı: 1-RTT
- Sonraki bağlantılar: 0-RTT
- Önceki session bilgisi ile hemen veri gönderilebilir
İlk Bağlantı: ClientHello → ServerHello → Application Data (1-RTT) Sonraki Bağlantılar: ClientHello + Early Data (0-RTT)
3. Connection Migration
- IP adresi değişse bile bağlantı devam eder
- WiFi → 4G geçişinde bağlantı kopmuyor
- Connection ID ile tracking
- Mobil cihazlar için harika
4. Independent Streams
- Her stream bağımsız
- Bir stream'de paket kaybı diğerlerini etkilemez
- TCP'deki head-of-line blocking tamamen çözüldü
5. Built-in Encryption (TLS 1.3)
- Varsayılan ve zorunlu şifreleme
- TLS 1.3 QUIC'e entegre
- Daha hızlı handshake
- Downgrade attack önleme
6. Improved Congestion Control
- Daha gelişmiş paket kaybı algılama
- Daha iyi bandwidth tahmini
- BBR (Bottleneck Bandwidth and Round-trip propagation time)
7. Flexible Frame Structure
- Genişletilebilir frame yapısı
- Gelecekte yeni özellikler eklenebilir
8. Improved Loss Detection
- Monoton artan paket numaraları
- Daha hassas RTT ölçümü
- Spurious retransmission önleme
9. Connection Close
- Graceful shutdown
- Hata kodları ile detaylı kapanış nedeni
10. Version Negotiation
- QUIC versiyonu pazarlığı
- Geriye uyumluluk
Performans Karşılaştırması
Bağlantı Kurma Süresi: HTTP/1.1: 3 RTT (TCP + TLS) HTTP/2: 3 RTT (TCP + TLS + ALPN) HTTP/3: 0-1 RTT (QUIC) Paket Kaybında (%1): HTTP/1.1: ~30% yavaşlama HTTP/2: ~15% yavaşlama HTTP/3: ~2% yavaşlama Mobil Ağlarda: HTTP/2: Sık bağlantı kopması HTTP/3: Sorunsuz geçiş

0 Comments
Recommended Comments
There are no comments to display.