HTTP/2
- Okunuşu
- eyç ti ti pi tu
Kısaca
HTTP/2, birçok istek ve yanıtı kompakt bir ikili biçimde tek bağlantı üzerinden aynı anda gönderen ve sayfaları hızlandıran, HTTP'nin ikinci büyük sürümüdür.
HTTP/2 nedir?
HTTP/1.1'de bir bağlantı aynı anda tek bir istek taşır; bu yüzden tarayıcılar site başına altıya kadar bağlantı açıp yine de sırada bekliyordu, geliştiriciler de dosyaları paketlemek ve görsel sprite'ları gibi numaralara başvuruyordu. Google'ın deneysel SPDY protokolüne dayanan ve 2015'te standart olarak yayımlanan HTTP/2, aynı metotları, durum kodlarını ve başlıkları koruyarak bu darboğazı ortadan kaldırır.
Temel özelliği çoklamadır (multiplexing). Mesajlar her biri bir akış (stream) kimliğiyle etiketlenen ikili çerçevelere bölünür; böylece düzinelerce istek ve yanıt birbirini beklemeden tek bir TCP bağlantısı üzerinde iç içe geçebilir. HPACK, neredeyse her istekte tekrarlanan başlıkları sıkıştırır; akışlar da önemli kaynakların önce gelmesi için öncelik taşıyabilir.
Uygulamalar için kod düzeyinde hiçbir şey değişmez: bir fetch çağrısı ya da bir sunucu route'u iki sürümde de aynı çalışır; tarayıcı ile sunucu da HTTP/2'yi TLS el sıkışması sırasında otomatik olarak anlaşır. Tarayıcılar HTTP/2'yi yalnızca HTTPS üzerinden kullanır; bu yüzden onu açmak genellikle sunucuda ya da CDN'de TLS'i açmak demektir. Dosyaları istenmeden önce göndermeye yarayan erken bir özellik olan server push az kullanıldı ve sonradan tarayıcılardan kaldırıldı.
Sık yapılan bir yanlış, HTTP/2'nin bütün beklemeleri ortadan kaldırdığını düşünmektir. HTTP düzeyindeki sıra başı tıkanmasını (head-of-line blocking) çözer, ama her şey hâlâ tek bir TCP bağlantısı üzerinde akar; bu yüzden kaybolan tek bir paket bütün akışları bekletir. HTTP/3 bunu, akışların birbirinden bağımsız olduğu UDP üzerindeki QUIC ile çalışarak çözer.
Önemli noktalar
- HTTP/2, Google'ın SPDY'sine dayanarak 2015'te standartlaştırıldı.
- Çoklama, birçok isteği tek bir bağlantı üzerinden aynı anda gönderir.
- İkili çerçeveler ve HPACK başlık sıkıştırması kullanır.
- Tarayıcılar onu yalnızca HTTPS üzerinden kullanır; uygulama kodu değişmez.
- TCP düzeyindeki sıra başı tıkanması kalır; QUIC üzerindeki HTTP/3 bunu çözer.
Örnek
# Ask for HTTP/2 and print the protocol that was negotiated
curl -sI --http2 https://example.com -o /dev/null -w '%{http_version}\n'
# 2
# nginx: enable HTTP/2 on the TLS listener
# listen 443 ssl;
# http2 on;Sık sorulan sorular
HTTP/1.1 ile HTTP/2 arasındaki fark nedir?
HTTP/1.1 metin tabanlıdır ve bağlantı başına aynı anda tek bir isteği ele alır. HTTP/2 ise ikilidir, başlıkları sıkıştırır ve birçok isteği tek bir bağlantı üzerinden çoklar; bu da özellikle çok dosyalı sayfalarda gecikmeyi azaltır.
HTTP/2 HTTPS gerektirir mi?
Standart şifresiz HTTP/2'ye izin verir, ama bütün büyük tarayıcılar onu yalnızca TLS üzerinden destekler; bu yüzden pratikte HTTPS gerektirir.
HTTP/2 ile dosyaları hâlâ paketlemeli miyim?
Daha az agresif şekilde. Çok sayıda küçük dosya artık pahalı değildir; bu yüzden kodu sayfaya göre bölmek iyi çalışır, ama paketleme yine de sıkıştırmaya yardım eder ve çok derin import zincirlerini önler.
İlgili sayfalar
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- HTTPSGüvenlik, s. 15HTTPS, tarayıcı ile web sitesi arasındaki trafiği TLS ile şifreleyen, verileri dinlemeye ve değiştirilmeye karşı koruyan HTTP'nin güvenli sürümüdür.
- QUICAğlar, s. 24QUIC, UDP üzerine kurulu; şifreli, güvenilir ve çoklu akışlı bağlantıları hızlı kurulumla sağlayan, HTTP/3'ün temelini oluşturan modern bir taşıma protokolüdür.
- TCPAğlar, s. 28TCP, bir bağlantı kurup kaybolan verileri yeniden göndererek iki program arasında veriyi güvenilir ve sıralı biçimde ileten temel bir internet protokolüdür.
- TLSGüvenlik, s. 44TLS, ağda gönderilen veriyi şifreleyen ve sunucunun kimliğini doğrulayan, HTTPS, e-posta ve birçok başka bağlantıyı güvenceye alan kriptografik protokoldür.
- GecikmeAğlar, s. 9Gecikme, bir istek ile yanıtın başlaması arasında geçen süredir; genellikle milisaniyeyle ölçülür ve bir uygulamanın ne kadar hızlı hissettirdiğini belirler.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin