Günümüzde HTTP 1.1, İnternet'teki ana protokol haline geldi. Ancak HTTP protokolünün doğduğu ilk günlerde, basit ve anlaşılır bir protokol olarak kabul edildi. 1996 yılında, HTTP 1.0 spesifikasyonu, RFC 1945'te sadece 60 sayfayla tanımlandı.1999'a kadar, HTTP 1.1, 176 sayfaya büyüyen RFC 2616'da tanımlandı. Ancak, web teknolojisinin hızla gelişmesiyle birlikte. HTTP 1.1, kullanıcıların performans gereksinimlerini karşılayamıyor. O zamandan beri Google, HTTP 1.1'deki iyi bilinen performans sorunlarını çözmek için SPDY protokolünü tanıttı. SPDY, Chrome, Firefox ve Opera tarafından desteklenir ve birçok büyük web sitesi (Google, Twitter, Facebook gibi) uyumlu istemciler için SPDY kullanır. SPDY endüstri tarafından kabul edildikten ve performansı büyük ölçüde artırabildiği kanıtlandıktan sonra, bir standart haline gelme koşullarını çoktan elde etti.
TTP / 2, HTTP 1.1'in 1999'da piyasaya sürülmesinden bu yana HTTP protokolünün ilk güncellemesidir ve esas olarak SPDY protokolüne dayanmaktadır. İnternet Mühendisliği Görev Gücü'nün (IETF) Hypertext Transfer Protocol Bis (httpbis) çalışma grubu tarafından geliştirilmiştir. Kuruluş, HTTP / 2 standart teklifini Aralık 2014'te tartışılmak üzere IESG'ye sundu ve 17 Şubat 2015'te onaylandı. HTTP / 2 standardı resmi olarak Mayıs 2015'te RFC 7540 olarak yayınlandı.
Peki, HTTP / 2'deki belirli değişiklikler nelerdir?
İkili çerçeveleme
Önce birkaç kavramı anlayalım:
HTTP / 2, verileri iletmek için HTTP 1.x'in metin biçimi yerine ikili biçim kullanır ve ikili protokol ayrıştırmak için daha verimlidir.
HTTP / 1 isteği ve yanıt mesajları bir başlangıç satırı, bir başlık ve bir varlık gövdesinden (isteğe bağlı) oluşur ve her bölüm bir metin satırı sonu ile ayrılır. HTTP / 2, istek ve yanıt verilerini daha küçük çerçevelere böler ve ikili kodlamayı kullanır.
HTTP / 2'de, aynı alan adı altındaki tüm iletişimler, herhangi bir sayıda çift yönlü veri akışını taşıyabilen tek bir bağlantıda (çoğullamaya dahil edilir) tamamlanır. Her veri akışı bir mesaj biçiminde gönderilir ve mesaj bir veya daha fazla çerçeveden oluşur. Çerçeve başlığındaki akış tanımlayıcısına göre yeniden birleştirilebildikleri için birden çok çerçeve sıra dışı gönderilebilir.
Çoğullama
Çoğullama, orijinal diziyi ve engelleme mekanizmasını değiştirme. Tüm istekler, bir TCP bağlantısı aracılığıyla eşzamanlı olarak yapılır. HTTP 1.x'te, aynı anda birden çok istek göndermek istiyorsanız, birden çok TCP bağlantısı kullanmanız gerekir ve kaynakları kontrol etmek için, tarayıcının ayrıca aşağıdaki şekilde gösterildiği gibi tek bir etki alanı adı için 6-8 sınırı vardır, kırmızı daire içine alınmış istek Alan adı bağlantılarının sayısı limiti aştığı için askıya alındı ve bir süre beklendi:
HTTP / 2'de ikili çerçeveleme ile HTTP / 2 artık çoklu akış paralelliği uygulamak için TCP bağlantılarına güvenmiyor. HTTP / 2'de:
Bu özellikle, performans büyük ölçüde artacaktır çünkü:
Sunucu itme
Sunucu, tarayıcının karşılık gelen konuma ayrıştırmasını beklemek yerine, HTML sayfasını gönderirken diğer kaynakları etkin bir şekilde itebilir, bir istek başlatabilir ve ardından yanıt verebilir. Örneğin, sunucu, istemcinin bu istekleri göndermeden önce HTML'yi ayrıştırmasına gerek kalmadan JS ve CSS dosyalarını istemciye etkin bir şekilde gönderebilir. Sunucu aktif olarak itebilir ve müşteri bunu alıp almayacağını seçme hakkına sahiptir. Sunucu tarafından itilen kaynak tarayıcı tarafından önbelleğe alınmışsa, tarayıcı bir RST_STREAM çerçevesi göndererek bunu reddedebilir. Aktif itme aynı zamanda aynı kaynak ilkesiyle uyumludur ve sunucu üçüncü taraf kaynaklarını istemciye rasgele itmeyecektir.
Üstbilgi sıkıştırma
HTTP 1.1 isteklerinin boyutu gittikçe büyür, bazen TCP penceresinin ilk boyutundan bile daha büyük olur çünkü gönderilmeden önce ACK ile yanıtın dönmesini beklemeleri gerekir. HTTP / 2, ileti başlığını sıkıştırmak için HPACK'i (http2 başlıkları için özel olarak tasarlanmış bir sıkıştırma biçimi) kullanır ve bu, ileti başlığının işgal ettiği ağ trafiğini kaydedebilir. Bununla birlikte, her HTTP / 1.x isteği, çok fazla bant genişliği kaynağını boşa harcayan çok sayıda yedek başlık bilgisi taşır.
Her HTTP iletişimi, iletişimin kaynaklarını, tarayıcı özniteliklerini, çerezleri vb. Açıklamak için kullanılan bir dizi başlık içerir.
Bu ek yükü azaltmak ve performansı artırmak için, HTTP / 2 şu başlıkları sıkıştıracaktır:
Örneğin: aşağıdaki şekilde yer alan iki istekte, ilk istek tüm başlık alanlarını gönderir ve ikinci istek yalnızca, fazlalık verileri ve ek yükü azaltabilen fark verilerini göndermeye ihtiyaç duyar.
Pratik bir örneğe bakalım, aşağıdaki, WireShark tarafından yakalanan Google ana sayfasına erişmek için bir pakettir:
Yukarıdaki resim, https://www.google.com/ adresini ziyaret ederek elde edilen ilk talebin başlığıdır. Toplam 437 bayt alan kaplayan başlığın içeriğini görebilirsiniz. Başlıkta çerezi seçiyoruz ve görebilirsiniz Tanımlama bilgisi toplam 118 baytlık bir alanı kaplar. Sonra ikinci isteğin başlığına bakarız:
Yukarıdaki şekilden de görebileceğiniz gibi, başlık sıkıştırması sayesinde, ikinci istekteki tanımlama bilgisi yalnızca 1 baytlık bir yer kaplar.Değiştirilen Kabul Et alanına bir göz atalım:
Kabul Et alanı İstek 1'deki içerikten farklı olduğu için sunucuya gönderilmesi gerekir, bu nedenle 29 bayt yer kaplar.
Not: İşte akamai'nin HTTP / 2 demo bağlantısı, ilgileniyorsanız, görmek için lütfen tıklayın: https://http2.akamai.com/demo
Tarayıcı ve ağ hizmeti desteği: http2 destek listesi
Sonuç
Youpaiyun CDN şu anda tüm platformlarda HTTP / 2'yi desteklemektedir ve varsayılan olarak etkindir. Ve HTTP / 2 HTTPS protokolü temelinde uygulandığından, YouPaiyun'un HTTPS hızlandırma hizmetinin etki alanı adını kullandığınız sürece, herhangi bir özel yapılandırma olmadan HTTP / 2 hizmetinden ücretsiz olarak yararlanabilirsiniz. HTTPS'yi etkinleştirmek için, karmaşık prosedürler olmadan yalnızca sertifika uygulamasını ve yönetimini tamamlamanız ve web sitelerinin ve web uygulamalarının HTTPS şifreleme dağıtımını kolayca gerçekleştirmeniz gerekir.