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.