HTTP/3 ve QUIC: Web'in taşıma katmanı sessizce değişiyor

Büyük sitelerin önemli bir kısmı artık HTTP/3 ile sunuluyor ve trafik TCP yerine UDP üzerinden akıyor. QUIC'in neyi çözdüğünü, kendi sunucunuzda nasıl açacağınızı ve dikkat edilmesi gerekenleri anlatıyorum.

Web, otuz yılı aşkın süre TCP üzerinde çalıştı. HTTP/3 ile bu değişiyor: altta artık QUIC adlı, UDP üzerine kurulu yeni bir protokol var. QUIC 2021'de RFC 9000, HTTP/3 de 2022'de RFC 9114 olarak standartlaştı ve bugün bütün büyük tarayıcılar destekliyor.

Neyi çözüyor?

  • Satır başı tıkanması: HTTP/2'de birçok istek tek bir TCP bağlantısını paylaşır; tek bir paket kaybolursa hepsi bekler. QUIC'te akışlar birbirinden bağımsızdır; kayıp yalnızca ilgili akışı etkiler.
  • Daha hızlı bağlantı: TLS 1.3 protokolün içine gömülüdür; el sıkışma TCP + TLS'teki gibi ayrı adımlar gerektirmez. Daha önce görüşülmüş sunucuya 0-RTT ile neredeyse anında veri gönderilebilir.
  • Bağlantı taşıma: Bağlantı IP adresiyle değil bir kimlikle tanımlanır. Telefon Wi-Fi'dan mobil veriye geçtiğinde bağlantı kopmaz.

Etkisi en çok kayıplı ve gecikmeli ağlarda, yani mobilde hissediliyor.

Tarayıcı HTTP/3'ü nereden biliyor?

İlk istek genellikle HTTP/2 ile gider. Sunucu yanıtında bir Alt-Svc başlığıyla "HTTP/3 de konuşuyorum" der, tarayıcı sonraki isteklerde QUIC'i dener. DNS'teki HTTPS kayıt türü bu bilgiyi baştan vererek ilk turu da kısaltabilir.

Kendi sunucunuzda açmak

  • Caddy: Varsayılan olarak açık.
  • Nginx (1.25 ve sonrası):
    listen 443 quic reuseport;
    listen 443 ssl;
    http2 on;
    add_header Alt-Svc 'h3=":443"; ma=86400' always;
  • Cloudflare arkasındaysanız: Panelde tek bir anahtar; ziyaretçiyle Cloudflare arasındaki bağlantı HTTP/3 olur.

En sık unutulan adım: güvenlik duvarında UDP 443 portunu açmak. TCP 443 açık olduğu için site çalışmaya devam eder, ama HTTP/3 hiç devreye girmez.

Dikkat edilmesi gerekenler

  • 0-RTT verisi tekrar oynatılabilir; sunucular bunu genelde yalnızca güvenli (GET gibi) istekler için kabul eder.
  • Bazı kurumsal ağlar UDP'yi engeller; tarayıcı bu durumda sessizce HTTP/2'ye döner. Yani HTTP/3'ü açmak bir şeyi bozmaz.

Kontrol

Geliştirici araçlarında Ağ sekmesine "Protocol" sütununu ekleyin; h3 görüyorsanız tamam.

İlgili Yazılar