Jump to content
  • entries
    2
  • comments
    0
  • views
    81

HTTP Geçmişi


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.html formatı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.0 belirtilmeye 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-Type ile 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: close ile 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 Content yanı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, deflate sı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_UPDATE frame'leri ile yönetim

7. Stream Reset

  • İstemci/sunucu stream'i iptal edebilir
  • RST_STREAM frame
  • 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ş


 

Ekrangrnts2025-11-11165844.png.8727603659d0791f96c20174663fc3aa.png

0 Comments


Recommended Comments

There are no comments to display.

×
×
  • Create New...

Important Information