HTTP/2'ye Giriş
Kendi kaynak incelemelerimle birlikte otomatik çevirinin yapıldığı orijinal adres: https://www.ssl.com/article/an-introduction-to-http2/
Bu makalede, HTTP/2 tarafından getirilen değişikliklerin yanı sıra etkileri de tartışılmaktadır. Protokole giriş ve İnternet kullanıcı deneyimini nasıl geliştirdiği hakkında kısa bir tartışma için okumaya devam edin.
Giriş
HTTP/2, tarayıcılar tarafından web sunucularıyla iletişim kurmak için kullanılan HyperText Aktarım Protokolü veya HTTP’nin en son sürümüdür . Eski SPDY protokolünden türetilen HTTP/2, HTTP/1.1’in 1997'de RFC 2068'de HTTP/1.1 standardizasyonundan bu yana ilk yeni sürümüdür.
SPDY (speedy “hızlı” olarak telaffuz edilir), öncelikle Google’da web içeriğini taşımak için geliştirilmiş, kullanımdan kaldırılmış bir açık özellikli ağ iletişim protokolüdür . SPDY; HTTP trafiğini ve web sayfası yükleme gecikmesini azaltma, web güvenliğini artırma özel hedeflerini taşır.
SPDY, web sayfası yükleme süresini azaltmak için istemci başına yalnızca bir bağlantı sağlıyordu. Böylece aynı alan adından yapılacak istekler (css, js, png vs.) için ayrı ayrı bağlantı açılmasına gerek kalmadan tek bir bağlantı üstünden akış sağlanarak bağlantı kurmak ve bitirmek için harcanan süreden tasarruf edildi.
Web güvenliğini arttırmak için tüm istekleri SSL/TLS (Aktarım Katmanı Güvenliği) şifrelemesi kullanarak ve gzip veya DEFLATE sıkıştırma metotları kullanarak sağladı. Bununla birlikte düz TCP bağlantısını (güvenliksiz) da destekler.
SPDY’nin çekirdek geliştiricileri hem Mike Belshe hem de Roberto Peon dahil olmak üzere HTTP/2'nin geliştirilmesinde yer almıştır . Şubat 2015'te Google, HTTP/2 standardının son olarak onaylanmasının ardından SPDY desteğinin kullanımdan kaldırılacağını duyurdu. Google, Google Chrome 51'de, Mozilla, Firefox 50'de, Apple , macOS 10.14.4 ve iOS 12.2'de SPDY desteğini kaldırdı.
İnternet Mühendisliği Görev Gücü (IETF) HTTP çalışma grubu httpbis (burada “bis” “iki kez” anlamına gelir) tarafından geliştirilmiştir ve Mayıs 2015'te RFC 7540 olarak yayınlanmıştır .
HTTP/2 uyarlaması
HTTP/2, resmi yayınlarından bu yana çalışan web siteleri tarafından giderek daha fazla kullanılmaktadır. Çevrimiçi anket hizmeti W3Techs, Eylül 2017'den Eylül 2018'e kadar HTTP/2 desteğinin izlenen tüm web sitelerinin %16'dan %30'a yükseldiğini belirtiyor.
Ayrıca, büyük tarayıcılar (ör. Chrome, Firefox, Edge, vb.) Zaten HTTP/2 için tam destek sağlamaktadır. (Hatta bazıları HTTP/2 standart olarak kabul edilmeden önce deneysel uygulamalar geliştirmiştir.)
Bu yaygın kabul, HTTP/2'nin Web’in fiili iletişim protokolü olma potansiyeline sahip olduğu anlamına gelir.
HTTP/2'nin arkasındaki motivasyon
Httpbis tüzüğü, HTTP/1.1'in HTTP/2 için motivasyon olarak geliştirilebilecek çeşitli bileşenlerinden bahsetmektedir. Ancak, grubun birincil hedefi son kullanıcı tarafından algılanan gecikmeyi azaltmaktı.
Bunu yapmak için httpbis, üstbilgi sıkıştırma ve agresif ön yükleme teknikleri (örn. Sunucu itme) yoluyla bant genişliğini en aza indirmeyi düşünürken, aynı zamanda bağlantı tıkanıklığı ve Hat Başı (HoL) engelleme sorunu gibi bilinen performans sorunlarını sistematik olarak ele almaya çalıştı.
Ayrıca, HTTP/2'nin geriye dönük olarak uyumlu olması gerekiyordu, yani HTTP/1.1'de bulunan aynı yöntem fiillerini, durum kodlarını, URI’leri ve (çoğu) başlık alanlarını kullanmak zorundaydı. HTTP/2'nin ayrıca masaüstü ve mobil web tarayıcıları, programlama arabirimleri, proxy’ler ve güvenlik duvarları gibi yaygın HTTP kullanım durumlarını destekleyecek şekilde tasarlanması gerekiyordu.
Bu uyumluluğu korumak için, çalışma grubu, istemcilerin ve sunucuların HTTP/1.1, HTTP/2 ve hatta HTTP olmayan protokoller arasından seçim yapmasına izin verecek bir protokol müzakere mekanizması geliştirdi.
Peki HTTP / 2'deki yenilikler neler?
HTTP/2, HTTP/1.1'de kullanılan URI şemalarını ve bağlantı noktası numaralarını hala kullanıyor (ör. http
için 80 ve https
için 443 bağlantı noktalarını kullanması gibi), ancak birçok şey kaputun altında farklı şekilde yapılır *.
En temel değişiklik, HTTP/2'nin temel veri birimi olarak çerçevelerin (frame) tanıtılmasıdır .
HTTP/1.1 geleneksel olarak ağ verilerini temsil etmek için paketleri kullanır . İstemci, GET
, POST
gibi yöntem fiili olan bir istek paketi oluşturur, bağlantıyı açıklayan bir başlık listesi ve uygulama verilerini içeren bir gövde ekler (header ve body).
Bir istek paketi alındığında, bir HTTP/1.1 sunucusu istenen bilgileri içeren benzer bir yanıt paketiyle yanıt verir. Sonuç olarak, her istek ve yanıt döngüsü yeni bir bağlantı gerektirir. Bir bağlantının açılması ütünün ısıtılması (WARMING UP) gibi bir kavramla açıklanır. Düşünün her gömlek için yeni bir ütünün ısınmasını bekliyor az önce kullandığınız sıcak ütüyü kullanamıyorsunuz! Ne kadar acı değil mi? İşte HTTP/2 ile hep ilk ütünüzü kullanarak tüm gömleklerinizi ütülüyorsunuz.
Bunun tersine, HTTP/2 istemcileri, sunucuyla sonraki tüm ağ iletişimleri için kullandıkları tek bir ağ bağlantısı kurar. Üst bilgiler, kullanıcı verileri, hata mesajları ve bu tür bilgiler ağ üzerinden iletilmeden önce çerçeveler olarak adlandırılan farklı ikili veri yapılarına paketlenir. HTTP/1.1 de başlık bilgileri gövdenin aksine SIKIŞTIRILMAZ ancak HTTP/2 ile başlık bilgileri de sıkıştırılır.
Bu küçük bir değişiklik gibi görünüyor, ancak önemli sonuçlar taşıyor.
Üstbilgi sıkıştırma
Çerçeveleri kullanmanın en büyük yararı, HTTP/2 başlıklarının bir HEADER
normal sıkıştırma yöntemleri kullanılarak sıkıştırılabilen çerçeve. Üstbilgiler herhangi bir veriden önce aktarılmalıdır, böylece üst bilgi sıkıştırması HTTP/2 tarafından uygulanan bant genişliği ek yükünü azaltabilir.
Başlık sıkıştırması, aşağıdaki performansı geliştiren HTTP/2 özellikleriyle birlikte, en az ağ kullanımının gerekli olduğu mobil veya nesnelerin interneti (IOT) uygulamalarında özellikle yararlı olabilir.
Akımlar ve çoğullama
Anlamsal olarak alakalı çerçevelerin bağımsız bir dizisine akış denir. Akışlara, onları oluşturan son nokta (yani istemci veya sunucu) tarafından benzersiz bir tanımlayıcı atanır, böylece diğer uç noktaların bunlar arasında ayrım yapması sağlanır.
Uç noktalar, aynı HTTP/2 bağlantısı üzerinden çeşitli akışlardan kareler arasına serpiştirerek, tek bir ağ bağlantısının aynı anda birden çok açık akışı desteklemesine izin verir. Bu işleme çoğullama denir.
Çoklama, birden çok isteğin tek bir TCP bağlantısını paylaşmasına izin vererek, birden fazla varlığın birden fazla bağlantı kurmanın gereksiz yükü olmadan paralel olarak indirilmesine izin verir.
Aynı bağlantının yeniden kullanılması, bağlantı sıkışıklığı ve daha önce bahsedilen HoL sorunu gibi sorunları azaltır ve önceki HTTP sürümlerinden daha iyi performans ve daha sorunsuz kullanıcı deneyimi sunar.
Akış bağımlılığı ve önceliklendirme
Birden fazla eşzamanlı akışı yönetmek, bazı akışların diğerlerinden önce işleneceği anlamına gelir. HTTP/2, geliştiricinin (veya yöneticinin) bu davranışa akış bağımlılığı adı verilen bir özellikle ince ayar yapmasına olanak tanır .
Bir akış, ele alınmadan önce başka bir akışın tamamen aktarılmasına bağlı olabilir. Örneğin, bir web sayfasının ana içeriğinin benzer içerik için herhangi bir öneriden önce yüklenmesi gereken bir sitede, HTTP/2, öneri akışının ana içerik akışına bağlı olarak oluşturulmasına izin verir.
HTTP/2 ayrıca akış önceliklendirmesini de destekler . Yani, her akışa, uç noktaların akışın çerçevelerini işlemek için ne kadar acil olarak kaynak ayırması gerektiğini önermek için bir öncelik atanabilir.
Önceliklendirme ve akışa bağımlılık, geliştiricilerin ve web sitesi sahiplerinin sitelerinin ağ kullanımını optimize etmelerine yardımcı olarak sitelerinin kullanıcı deneyimini önemli ölçüde artırabilir.
Server Push
Son olarak, HTTP/2 “push” işlevselliği sağlayarak bir web sitesinin performansını artırabilir. Bir HTTP / 2 web sunucusu, istemcinin istediği daha fazla sorgu için verilerle yanıt verebilir. Bu, sunucunun, tarayıcının ilk yanıtı incelemesini beklemeden ve dolayısıyla ek bir istek döngüsünün yükü olmadan bir web tarayıcısının bir sayfa oluşturması gerektiğini bildiği verileri sağlamasına olanak tanır.
Sunucu aktarımı, geliştiricilere bir tarayıcının web sitelerini oluşturması için gereken istek sayısı üzerinde tam kontrol sağlar. Doğru kullanıldığında, bu özellik ağ ek yükünü en aza indirebilir.
Doğal olarak, itme özelliğinin yanlış kullanımı da gerçekte gerekenden daha fazla bant genişliği harcayabilir. Bu nedenle, HTTP / 2 bir istemcinin ilk bağlantı kurulurken sunucu pushunun devre dışı bırakılmasını istemesine izin verir.
HTTP / 2 Güvenliği
Bu noktaya kadar okuduysanız, HTTP/2 geliştiricilerinin performansı artırmak için gerçekten çaba harcadıkları açık olmalıdır. Bununla birlikte, HTTP/2'nin de tarayıcı kullanıcılarının güvenliğini artırmaya yardımcı olabileceği unutulmamalıdır.
Daha spesifik olarak, HTTP/2 hem HTTP URI’leri (yani şifreleme olmadan) hem de HTTPS URI’ları (TLS şifreli kanallar üzerinden) için tanımlanır. Standardın kendisi şifreleme kullanımını gerektirmemesine rağmen, tüm önemli tarayıcı uygulamaları (yani Firefox [09] , Chrome, Safari, Opera, IE, Edge) TLS üzerinden yalnızca HTTP/2'yi destekleyeceklerine karar vermiştir .
Aslında, tarayıcılar şifreli TLS üzerinden açık metinli HTTP / 2 ve HTTP / 2'yi iki farklı protokol olarak ayırır. Şifreli HTTP / 2 denir
h2
ve açık metin
H2C
. Bu yazı itibariyle, hiçbir büyük tarayıcı desteklemiyor
H2C
yani bir web sitesinin HTTP / 2'nin diğer avantajlarından yararlanabilmesi için TLS şifrelemesi zorunludur. Bu nedenle, HTTP / 2 varsayılan web ağı protokolü haline geldiğinde, henüz SSL / TLS’ye yükseltilmemiş eski web sitesi sahipleri nihayetinde bunu yapmaya motive edilecektir.
Sonuç
HTTP / 2'nin yaygın olarak benimsenmesi yeni ve geliştirilmiş bir Web sağlayacaktır. Daha hızlıdır, daha az bant genişliğine ihtiyaç duyar ve web sitelerinin güvenli kalmasına yardımcı olur. Genel olarak benimsenmesi, genel web kullanıcı deneyimini daha pürüzsüz ve daha güvenli hale getirecektir.