Chrome, google’ın SPDY protokolü desteğini bıraktığına göre, kullanıcılarınızın eski HTTP/1.1 ‘den daha hızlı bir şekilde kodlarınıza erişmesini istiyorsanız HTTP/2 ‘ye dönmenin zamanı geldi.
“Mozilla’dan patrick mcmanus’a (Firefox’un HTTP/2 uygulamasının yazarı ve IETF HTTP çalışma grubunun eş başkanı) göre, HTTP/2 ‘nin birçok avantajı var: ” Yüksek gecikme ortamları için daha hızlı sayfa yükleme, gelişmiş responsice özelliği ve daha yüksek güvenlik ve gizlilik çubuğu.
Kullanıcılar, HTTP/2 ile sayfa yükleme sürelerinde yüzde 30’a varan bir artış görebilir. Mcmanus, sunucu tarafında HTTP/2 ‘nin i̇şlemci ve bant genişliği gereksinimlerini azaltacağını söyledi.
Sunucular ve web tarayıcıları (kısmen SPDY protokolüne dayalı olan) HTTP/2 için hazır durumda. Yine de HTTP/2 aslında sitelerin yaklaşık yüzde 9’u tarafından kullanılıyor çünkü web sunucunuzdaki yapılandırmayı değiştirmek, hatta yapılandırmayı güncellemek ve ardından bunları normalden daha yakından kontrol etmek kadar kolay değil.
Microsoft’un IBH’si (İnternet Bilgi Hizmetleri için web sunucusu programı), Windows10 için Windows server 2016 gönderilinceye kadar HTTP/2 ‘yi desteklemeyecektir. Oracle, java EE 8’in HTTP/2 ‘yi tamamen destekleyeceğini ve NGINX kullanıyorsanız sorunları önlemek için 1.11.0 kullandığınızdan emin olun. (bu HTTP/2 hata ayıklama kaynakları listesi yararlı olabilir. Ayrıca sunucu yazılımınızın bu yılın Black Hat HTTP/2 güvenlik sorunlarıyla ilgili gerekli önemleri aldığından olduğundan emin olsanız iyi olur).
Bundan tam olarak yararlanmak için, kodunuzda da bazı iyileştirmeler yapmanız gerekecek, ancak hemen faydaları elde etmek için büyük bir rewrite ihtiyacınız yok. bir SSL sertifikası almanız ve HTTPS’ye geçmeniz gerekir çünkü Firefox ve Chrome, en son uygulama katmanı protokol anlaşmasını (ALPN) kullanarak yalnızca TLS üzerinden HTTP/2 ‘yi desteklemektedir. Çağırdığınız 3. parti içerikler konusunda endişelenmeniz gerekebilir çünkü bu içerikler HTTP/2 ile hızlandırılamayacaklardır.
Ancak bundan daha fazlası, sitelerinizi performansa dayalı olarak nasıl inşa edeceğinizi düşünmeniz gerekiyor çünkü web hızlandırma teknolojisi sağlayıcısı Matthew Prince (Cloudflare’in CEO’su) bize belirttiği gibi, HTTP/2, web sitesi performansını artırmak için kullandığımız kavramları tersine çeviriyor.
Hızlandır ve Şifrele
HTTP1 1.1, esasen senkronize olan bir protokoldür. Öncelikle, tarayıcı sayfa için html ister ve ayrıştırmaya başladığında, sayfadaki diğer tüm öğeler sırayla ister: CSS, Javascript, ardından çeşitli medya biçimleri ve sayfadaki diğer tüm materyaller. Tarayıcılar işleri hızlandırmak için etki alanı başına birden çok eşzamanlı bağlantı kurar. Web siteleri bundan yararlanmak için kaynakları farklı alanlara ayırmaya başladı. Prince durumu ise şöyle özetledi; “Etki alanı paylaşımında www1, www2, www3 vb. var ve ‘tüm javascript’i buna koyacağız, tüm css’yi buna koyacağız ve yine tüm görselleri buna koyacağız'”.
HTTP/2 eşzamansızdır ve istekleri tek bir tcp bağlantısında çoğullamak için binary sistemini kullanır (HTTP/2, metin tabanlı bir protokolden ziyade binary bir protokoldür). Html için her zaman bir ilk istek vardır, ancak diğer tüm hizmetler için eşzamanlı istekler vardır. Bu, kullanıcı için daha hızlı ve sunucu için daha etkilidir, domain sharding birçok bağlantı oluşturduğu için siteyi yavaşlatır, (tarayıcılar, ilk olarak hangi varlıkları alacaklarını optimize etmek için HTTP/2’deki akış önceliği seçeneğini kullanabilir.)
Bu aşamanın sonrasında ise şifreleme vardır (HTTP/2’nin kendisi şifreleme gerektirmez, ancak HTTP/2’nin SSL gerektirdiği belirtilmiştir).
Google’dan Ilya Grigorik (W3C Web Performans Ekibi’nin eş başkanı), “HTTP/2’ye geçmeye bir adım önde başlamak için sitenizi HTTPS’ye taşıyın! .” şeklinde açıklama yapmıştır.
Sunucu zorlamasıyla etkinleştirilecek bir sonraki harika uygulamanın ne olacağını bilmiyoruz, ancak i̇nternet’in nasıl çalıştığını yeniden şekillendirmek için bu fırsatlardan biri olduğunu düşünüyoruz -Matthew Prince, Cloudflare,
Web geliştiricileri genellikle, şifrelenmiş bir kanal aracılığıyla etkileşim kurmanın iletişimi yavaşlattığı varsayımıyla encryption’a direndiler. Modern cpu’lar ve içerik dağıtım ağları, artık bunun nadiren doğru olduğu anlamına geliyor. Ve kullanıcı başına daha az tcp bağlantısı, kullanıcı başına daha az sunucu kaynağı anlamına geldiğinden, zaman uyumsuz http / 2 istekleri herhangi bir şifreleme ek yükünden daha ağır basar.
“Eski http1 dünyasında, sayfanıza şifreleme eklemek performans açısından bir hit oldu. Yeni http / 2 ortamında bu en son protokollerden yararlanmak istiyorsanız, şifrelemeye sahip olmalısınız. Prens, iyi tavsiye kötü bir tavsiye olur. Yapabildiğiniz kadar hızlı olmak istiyorsanız, şifreleme kullanmıyorsanız, alanları paylaşıyorsunuz, web sitelerine asla bir şey yerleştirmiyorsunuz, büyük dosyalar halinde birleştirmeye çalışıyorsunuz yapabildiğiniz gibi, çünkü daha az dosyanız var. Bu ortamda öğeleri daha küçük parçalara ayırmak mantıklıdır, böylece daha küçük parçaları arşivleyebilir ve hepsini paralel olarak indirebilirsiniz, varsayılan olarak şifrelemenin açık olması gerekir ve en kötüsü parçalama yapabileceğin bir şey.
Güvenlik yazılımı sağlayıcısı thawte’den ian fergusson, bunun değiştirilmesinin http / 2’ye geçişle ilgili en zor şey olabileceğini belirtti; “Birçok site hızlarını artırmak için çok zaman harcadı.” http / 2 tanıtılmadan önce alınan kısayolların ve saldırıların geri alınması gerekli olacaktır.
Push’a Geçiş
“Http / 2’nin ilk avantajları biraz spdy’ye yakındır; her ikisi de cloudflare tarafından desteklenirken, prince” önümüzdeki 18 ay içinde bireyler güncelleme yaptıkça spdy’nin sona ereceğini “öngördü. Ancak http / 2’nin iki ek özelliği var: başlık sıkıştırma ve sunucu sürücü.
Herhangi bir http isteğinde, başlıklar çok benzerdir; “Binlerce kez tekrarlanan alanlar var,” dedi prince. Http / 2, istek ve yanıt üstbilgileri için bir sıkıştırma sözlüğü sağlar, böylece üstbilgiler her seferinde düz metin göndermek yerine sıkıştırılır (ve bir kez gönderilen üstbilgi alanlarına yinelenmek yerine başvurulur). Gezginler için bu daha hızlıdır ve bant genişliğinden tasarruf etmenizi sağlar. Prince, başlık sıkıştırmayı açtıklarında cloudflare’nin başlıklarda yüzde 30’luk bir bant genişliği tasarrufu gördüğünü ve dropbox’ın http / 2’yi açtıktan sonra trafik bant genişliğinin yarısını gördüğünü söyledi (daha önce spdy kullanmış olsalar da, güvenlik sorunları nedeniyle başlık kullanmamışlardı. Sıkıştırma)
Daha kritik bir değişim, sunucu sürücüsüdür. Http / 2 bir süredir ana tarayıcılar tarafından desteklense de, server push daha yeni bir eklentidir. Tarayıcı geçmişte ‘bana bir şey ver’ demiştir, ardından sunucu yanıtlar ve onu geri gönderir. Sunucu itme, modeli çevirir, böylece sunucu ‘işte ihtiyacınız olacak şeyler’ diyebilir ve bunları proaktif olarak tarayıcıya itebilir. Prince, html’yi oluşturmak her zaman aynı miktarda zaman alır, ancak diğer tüm araçlar, css ve javascript, jpeg’ler, png’ler ve gif’ler, html’yi oluşturmayı beklerken proaktif olarak gönderilir.
Bu, özellikle dinamik sitelere yardımcı olur ve javascript için önemli olmaya başlayan web personeli, web kancaları ve zaman uyumsuz / bekleme gibi geliştirme eğilimlerinin yanı sıra webrtc gibi gerçek zamanlı iletişimler ve aşağıdaki uygulamalar için iyi bir uyum sağlar. Kaynakları kısıtlı olan iot cihazları.
Prince, etkinin geniş olmasını bekliyor. Ajax benzeri javascript çağrıları artık çok daha basit, daha akıcı bir özelliğe taşınabilir; sunucu basitçe “Bu sorguya ihtiyacın var” diyebilir. Bir gönderi göndereceğim, yani bunu aldın.
Tıpkı push e-postayı bir masaüstü aracından e-postayı, çok çeşitli siteler ve uygulamalar dışında, belirli şekillerde bilgisayarınızda gerçek zamanlı olarak yapabileceğiniz bir şeye dönüştürme şekli gibidir.
“Müşteriyi sürekli olarak ileri geri sorgulamak zorunda kaldığı için bir mobil cihazda ne kadar bant genişliği, pil gücü ve cpu israf edildiğini düşündüğünüzde; bunu ters çevirip ‘buradayım, bekliyorum ve sadece bana hazır olduğunuz anda ihtiyacım olanı aşağı itin, ‘bu tüm modeli tersine çevirir’ dedi prince. “Sunucu zorlamasıyla etkinleştirilecek bir sonraki harika uygulamanın ne olacağını bilmiyoruz, ancak i̇nternet’in nasıl çalıştığını yeniden şekillendirmenin bu yollarından biri olduğunu düşünüyoruz.”
“Ancak prince, sunucu push işlevinin artık çalışma şeklinin – sunucunun üstbilgi yanıtına bir bağlantı başlığı koymanız gerektiği” konusunda uyardı “Biraz hantal ve kırılgan; bunu gerçekleştirmenin daha başarılı yollarının neler olduğunu ortaya koymak için geliştirici görüşmeleri yapıyoruz.
Web sunucularının ve tarayıcıların ötesinde, bunun uygulamalarda ve platformlarda görünmesini bekleyin; prince, “Insanlar wordpress eklentileri üzerinde çalışıyor ve onu yeni araçlar oluşturmak için nasıl kullanabileceğimizi görmek için rails ve php’de onunla oynuyor” dedi. Ve mcmanus, “What-wg [web hiper metin uygulama teknolojisi çalışma grubu], javascript’in, push kullanımı için bir başka umut verici durum olarak doğrudan itmeye nasıl maruz bırakılabileceğini ele alıyor.”
Özellikle mobil kullanıcılar için, tüketilemeyen kaynakları itmenin bant genişliği etkisine karşı sunucu i̇tme özelliğini kullanarak, web’inizde daha iyi performans ve yanıt verme yeteneği arasındaki dengeleri de düşünmeniz gerekir.
Mcmanus, “Tarayıcılarda, sunucu itme güvenilir bir şekilde çalışıyor, ancak bir web sitesinin en iyi faydayı elde etmek için neyi zorlamak isteyebileceğini belirlemek zor olabilir,” dedi. Yüksek gecikmeli mobil ağlarda gelişmiş istek paralelliği nedeniyle, mobil kullanıcılar için http / 2 ile ilgili en büyük iyileştirmeler buna atfedilir. Http / 2, çeşitli nesnelerin önceliklerini ele almak için öncekinden çok daha iyidir ve bu, daha yavaş ağlarda çok önemlidir.
“çeşitli sunucu itme stratejilerini denerken, geliştiriciler en iyi uygulamalar henüz ortaya çıkmadığı için dikkatli davranmalıdır” dedi. “Başarılı yaklaşımlar büyük ölçüde site içeriğine dayanır. Şimdiye kadar deneyim daha azdır; kuvvetli bir şekilde basmak bant genişliğini boşa harcar. Geliştiricilerin site performanslarını belirlemelerine yardımcı olmak için gerçek kullanıcı i̇zleme şiddetle tavsiye edilir. Hedeflenen yöntemler ilk başta mantıklıdır, site genelindeki politikalar yerine.
“Mcmanus ayrıca,” sayfa yüklemenin başında, itmenin optimal etkisinin çok kısa bir zaman aralığı ile sınırlı olduğunu, bu nedenle yazı tipi veya stil sayfası gibi küçük ve kritik bir şeyi itmeye başlamak için mantıklı bir yer olacağını belirtti .
Grigorik rıza gösterdi. Burada doğru bir evrensel cevap yoktur. Bazı uygulamalar gecikmeyi fazlalık bayt riskine karşı değiştirmek isterken, diğerleri gecikme üzerinden baytları en üst düzeye çıkarmak isteyebilir. Uygulamaya göre değişir.
Ayrıca, http / 2’yi bir kenara bırakarak, henüz https aracılığıyla erişilemeyen üçüncü taraflardan (özellikle reklam ağlarından) gelen içeriği nasıl yöneteceğinizi de düşünmeniz gerekir.
Fergusson, “Geliştiricilerin bu sorunu aşmak için üçüncü taraf içeriğiyle kullanabilecekleri, eşzamansız, önyükleme ve ön bağlantı gibi bir dizi teknik var,” diye önerdi.
Mcmanus, “Bağlantı birleştirme, http / 2’nin çoklu kaynak sorununa yardımcı olan önemli bir özelliğidir,” diye açıkladı. Farklı ana bilgisayar adlarına sahip olmalarına rağmen, birleştirme, aynı barındırma sağlayıcısını ve güvenli kimlik kanıtını paylaşan farklı ana bilgisayar adlarının aynı bağlantıyı paylaşmasını sağlar. ‘ ayrıca bu değişikliğe yardımcı olan şey, http / 2 alternatif hizmetlerinin yeni bir ietf http / 2 uzantısı (rfc 7838) olarak tanıtılmasıdır. Kaldırılan herhangi bir ilişki, artan bir performans avantajına sahiptir.
Bunları harici sitelerden getirmek yerine, daha fazla öğeyi kendi barındırıcınıza geçirmeyi düşünebilirsiniz. Grigorik, “Aynı konağa daha fazla varlığa sahip olmanın avantajları var. Ancak bu bir ön koşul değil,” dedi ve “En kötü durumda daha kötü değilsin.”