İçeriğe atla

HTTP/2 Server Push

HTTP/2 Server Push, HTTP/2 uyumlu bir sunucunun kaynakları, istemci talep etmeden önce HTTP/2 uyumlu bir istemciye göndermesine izin verir. Çoğunlukla, kaynakları önceden yüklemede yardımcı olabilecek bir performans tekniğidir.

HTTP/2 Server Push,[1] sunucudan istemciye bir bildirim mekanizması değildir. Bunun yerine, itilen kaynaklar, kaynağı yine de almak için bir istek oluşturmuş olabileceği durumlarda istemci tarafından kullanılır; Bununla birlikte, söz konusu itilen kaynaklar istemci tarafından kullanılmadığında bu, bant genişliğinin boşa harcanmasına neden olabilir.

Temel konsept

Üç kaynağı olan bir web sitesi düşünün: index.html, style.css ve script.js. Bir kullanıcı, tarayıcısı aracılığıyla bu web sitesinin ana sayfasına bağlandığında, otomatik olarak index.html'yi alır. Tarayıcı, index.html'deki HTML metnini ayrıştırırken, style.css ve script.js gerektiren düzenleme ve işlem talimatlarını bulur. Bu noktada, tarayıcı bu diğer iki dosyayı almak için isteklerde bulunacaktır. Web sayfasının tamamını bir araya getirmek için tarayıcı, sitenin yapısını yavaş yavaş keşfederken bu tür istekleri istifler ve kullanıcıya sonuç döndürür.

HTTP/2 Push ile sunucu, içeriğin daha talep edilmeden gönderilmesini tetikleyen kurallara sahip olarak inisiyatif alabilir. Bu örnek senaryoda, sunucu, index.html isteyen herkesin style.css ve script.js'ye ihtiyacı olacağını bilir, böylece istemcinin istemesini beklemeden bunları hemen istemciye iletebilir. Doğru yapılırsa, tarayıcı index.html'yi ayrıştırmayı bitirdiğinde, style.css ve script.js aktarımı çoktan başlamış, hatta tamamlanmış, bunları talep etme ve gelmelerini bekleme gecikmesini ortadan kaldırmış olacaktı.

Push, özünde bir çerçeve protokolü olan HTTP/2 üzerinden çalışır; bu, bilgilerin çerçeve adı verilen bayt gruplarında değiş tokuş edildiği anlamına gelir. Ek olarak, çerçeveler akışların bir parçasıdır ve akışlar bir sayı ile tanımlanır. Akış numarası, her çerçevede bir ikili alan olarak bulunur. Akışlar, istekleri yanıtlarla eşleştirmeye izin verir, örneğin, akış 3'teki GET /index.html isteğine verilen yanıt da akış 3'te olmalıdır.

Farklı çerçeve türleri vardır ve her birinin farklı bir işlevi vardır. HTTP/2, bu türlerden yalnızca birkaçına sahiptir ve temelleri açıklamak için hepsine ihtiyacımız yok. İşte bu açıklama için ilginç olanlar:

  • HEADERS çerçevesi. Adından da anlaşılacağı gibi, bu çerçeve türü HTTP başlıklarını taşır. Tarayıcı tarafından sunucuya gönderildiğinde, bir istekte bulunulduğunu gösterir. Sunucu tarafından tarayıcıya gönderildiğinde, önceki bir isteğe veya push sözüne yanıt gönderildiğini belirtir.
  • PUSH_PROMISE çerçevesi. Bu çerçeve, sunucu tarafından bir kaynağı göndermeye başlamak için tarayıcıya gönderilir. Ayrıca HTTP başlıklarını da içerir. Ancak, bir PUSH_PROMISE çerçevesinde bulunan başlık türleri, normalde bir istekte bulunacak olan başlıklardır. Bu, bir sunucunun normalde göndereceği yanıt başlıklarından farklıdır. Örneğin, istek URL'si PUSH_PROMISE çerçevesinde HTTP/2'ye özgü :path sözde başlığı olarak bulunur, tıpkı bir ana bilgisayarı belirtmek için :authority sözde başlığında olduğu gibi. Bir PUSH_PROMISE içinde bulunabilecek ve bazı tarayıcıların kullandığı diğer başlıklar, örneğin if-none-match gibi önbellek başlıklarıdır.
  • VERİ çerçeveleri. Bu çerçeveler, bir kaynağın gerçek içeriğini veya tarayıcının POST'ları veya PUT'ları sunucuya gönderdiği içerikleri taşımak için her iki yönde gönderilir.
  • RST_STREAM çerçeveleri. Bu çerçeveler birçok amaca hizmet eder. Bunlardan biri, sunucuya gönderilen bir akışın gerekli olmadığı yönünde tarayıcı sinyali veriyor.

Sunucu bir kaynağı göndermek istediğinde, bir PUSH_PROMISE çerçevesi hazırlar ve tarayıcıyı itilen içeriği kullanmaya ikna etmek için onu mümkün olan en iyi şekilde tasarlar. Ardından sunucu, PUSH_PROMISE çerçevesini tarayıcı tarafından başlatılan normal bir akışın yanıt bölümüne ekler. Ancak, iletilen kaynağa ilişkin gerçek veriler, sunucu tarafından başlatılan yeni bir akışta gönderilir. – ve böylece bir çift sayı ile.

Tarayıcı, itilen verileri kullanmaya karar verene kadar geçici bir "karantina" bölgesinde tutar. Daha sonra, tarayıcı her gerçek istekte bulunacağı zaman, almak istediği istekle yeterince benzer olup olmadığını görmek için alınan herhangi bir push sözünün içeriğini inceler. Ancak, sunucunun söz verilen kaynak için veri göndermeye başlamak için o ana kadar beklemesine gerek yoktur. Tarayıcı tarafından başlatılan akışta PUSH_PROMISE çerçevesi gönderildikten sonra, sunucu, sunucu tarafından başlatılan yeni akışta bir HEADERS çerçevesi kullanarak yanıt başlıklarının ne olacağını gönderebilir ve daha sonra DATA çerçevelerini kullanarak kaynağın verilerini gönderebilir. Ve herhangi bir zamanda, tarayıcı RST_STREAM kullanarak herhangi bir aktarımı kesebilir.

Önceki örnekte bunun nasıl çalışacağı aşağıda açıklanmıştır. Sunucu HTTP/2 PUSH'a hazırsa, index.html'ye bir istek aldığında, style.css ve script.js'ye yapılan isteklerin yakından takip edildiğini tahmin edebilir. Bu nedenle, olayların biraz önüne geçmek için itici sözler verir. Olayların oluş sırasına ve akış numaralarını oluşturmasına göre işler şöyle görünebilir:

  • Sunucu, akış 3'te index.html isteyen HEADERS çerçevesini alır ve style.css ve script.js ihtiyacını tahmin edebilir.
  • Sunucu, yine akış 3'te style.css için bir PUSH_PROMISE ve script.js için bir PUSH_PROMISE gönderir. Bu çerçeveler kabaca bir tarayıcının isteğine eşdeğerdir.
  • Sunucu, index.html isteğine yanıt vermek için akış 3'te bir HEADERS çerçevesi gönderir.
  • Sunucu, hala akış 3'te olan index.html içeriğiyle DATA çerçeve(ler)i gönderir.
  • Sunucu, akış 4'te style.css'ye yanıt için HEADERS çerçevesi gönderir – çift akış numarasına dikkat edin – ve ardından akış 6'da script.js'ye verilen yanıt için.
  • Sunucu, kendi akış numaralarını kullanarak style.css ve script.js içerikleri için DATA çerçeveleri gönderir.

Anında iletme vaatleri, tarayıcının bunları herhangi bir keşiften çok önce elde etmesi için mümkün olduğunca erken gönderilir. HTTP üstbilgilerinin (özellikle 'önyükleme' anahtar kelimesi[2] ) tarayıcının getirmesi gereken URL'leri ortaya çıkarabileceğine ve hevesli bir tarayıcının bu başlıkları gördükten sonra kaynakları istemeye başlayacağına dikkat edin. Bu nedenle, anında iletme vaatleri, eklendikleri akışın yanıt başlıklarından bile önce gönderilir.[3]

Uygulamalar

HTTP/2 Server push aşamalı olarak uygulanmaktadır, örneğin Nginx web sunucusu bunu Şubat 2018'de 1.13.9 sürümünde uygulamıştır.[4]

Google Chrome ekibine göre, HTTP/2 ve gQUIC'de Server Push nadiren kullanılıyor ve aktarılan kaynaklar, kullanılandan daha sık kullanılmamaktadır. Özelliği Chrome ve Chromium'dan kaldırmayı önerdiler.[5]

Kaynakça

  1. ^ "HTTP/2 server configurations" (İngilizce). 28 Mart 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Mart 2019. 
  2. ^ "Preload". w3c.github.io. 28 Şubat 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Kasım 2016. 
  3. ^ "A closer look to HTTP/2 Push". ShimmerCat. 22 Şubat 2020 tarihinde kaynağından arşivlendi. 
  4. ^ "Arşivlenmiş kopya". 2 Temmuz 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2021. 
  5. ^ "Arşivlenmiş kopya". 20 Temmuz 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2021. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">HTTP</span> iletişim protokolü

HTTP bir kaynaktan dağıtılan ve ortak kullanıma açık olan hiperortam bilgi sistemleri için uygulama seviyesinde bir iletişim protokolüdür. HTTP, World Wide Web için veri iletişiminin temelidir; burada köprü metni belgeleri, örneğin bir fare tıklamasıyla veya bir web tarayıcısında ekrana dokunarak kullanıcının kolayca erişebileceği diğer kaynaklara köprüler içerir.

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

<span class="mw-page-title-main">ASP</span>

Active Server Pages kısaca ASP, Microsoft'un ilk dinamik web sayfaları üretmek için geliştirdiği sunucu taraflı betik motoru. Klasik ASP ya da ASP Klasik olarak da bilinir.

<span class="mw-page-title-main">Web sayfası</span> World Wide Web ve web tarayıcıları aracılığıyla doğrudan görüntülenebilen tek belge

Web sayfası, World Wide Web için hazırlanan ve web tarayıcısı kullanılarak görüntülenebilen dokümanlardır. Web sayfaları çoğunlukla HTML formatında kodlanır, CSS, betik, görsel ve diğer yardımcı kaynaklardan yararlanılarak son görünümüne sahip olur ve işlevsellik kazanır. Birden fazla web sayfasının bir araya gelmesi ile ortaya çıkan web sitesi ile karıştırılmamalıdır. Günlük konuşma dilinde internet sayfası terimi de çoğunlukla web sitesi anlamında kullanılmaktadır.

<span class="mw-page-title-main">Vekil sunucu</span>

Vekil sunucu veya yetkili sunucu, İnternet'e erişim sırasında kullanılan bir ara sunucudur. Bu durumda, örneğin bir ağ sayfasına erişim sırasında doğrudan bağlantı yerine:

<span class="mw-page-title-main">İstemci-sunucu</span>

İstemci-sunucu, istemciyi sunucudan ayıran bir ağ mimarisidir. Her bir istemci yazılımı, sunucuya ya da uygulama sunucusuna isteklerini (request) gönderir.

İngilizce: Lightweight Directory Access Protocol veya kısaca LDAP TCP/IP üzerinde çalışan indeks servislerini sorgulama ve değiştirme amacıyla kullanılan uygulama katmanı protokolü.

<span class="mw-page-title-main">HTTP 404</span> HTTP hata kodu

HTTP 404, HTTP 404 - Dosya bulunamıyor, 404 Bulunamadı veya Sayfa bulunamadı hata mesajı, tarayıcının belirli bir sunucuyla iletişim kurabildiğini, ancak sunucunun istenen şeyi bulamadığını belirtmek için bilgisayar ağı iletişimlerinde kullanılan bir Hiper-Metin Transfer Protokolü (HTTP) standart yanıt kodudur. Hata, bir sunucu istenen bilgiye sahip olup olmadığını açıklamak istemediğinde de kullanılabilir.

<span class="mw-page-title-main">World Wide Web</span> internet kullanarak ulaşılan, birbirine bağlı belgelerden oluşan küresel sistem

World Wide Web, Dünya Çapında Ağ (kısaca WWW veya Web), İnternet üzerinde yayınlanan birbirleriyle bağlantılı hiper-metin dokümanlarından oluşan bir bilgi sistemidir. Bu dokümanların her birine Web sayfası adı verilir ve Web sayfalarına İnternet kullanıcısının bilgisayarında çalışan Web tarayıcısı adı verilen bilgisayar programları aracılığıyla erişilir. Web sayfalarında metin, imaj, video ve diğer multimedya ögeleri bulunabilir ve diğer bağlantı ya da link adı verilen hiper-bağlantılar ile başka Web sayfalarına geçiş yapılabilir.

<span class="mw-page-title-main">HTML</span> işaretleme ve web programlama dili

Hiper Metin İşaretleme Dili web sayfalarını oluşturmak için kullanılan standart metin işaretleme dilidir. Dilin son sürümü HTML5'tir.

<span class="mw-page-title-main">SOAP</span>

SOAP , Service-oriented Architecture felsefesini pratiğe uyarlayan iki interface'den biridir. Üzerinde bulunan Universal Description Discovery and Integration (UDDI) ile birlikte hizmet yönelimli mimarinin pratikte kullanılmasını mümkün kılar.

Real Time Streaming Protocol (RTSP), eğlence ve iletişim sistemlerinde medya sunucularındaki verilerin akışını kontrol etmek için tasarlanan bir ağ denetim protokolüdür. Bu protokol bitiş noktaları arasındaki medya bağlantılarının kurulması ve kontrol edilmesinde kullanılır. Medya sunucularının sorunu VCR'lerdeki gibi müşterilerin sunucudan alınan medya dosyalarını çalışma, durdurma gibi kısacası gerçek zamanlı kontrolü kolaylaştırmak.

<span class="mw-page-title-main">WebSocket</span> bilgisayar iletişim protokolü

WebSocket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalı sağlayan bir bilgisayar iletişim protokolüdür. WebSocket protokolü IETF tarafından 2011 yılında RFC 6455 ile standart hale getirilmiş ve WebIDL içerisindeki WebSocket API W3C tarafından standart hale getirilmektedir.

Cross-Origin Resource Sharing (CORS), bir web sayfası üzerindeki bazı kaynakların, kaynağın sunulduğu alan adının dışındaki bir alan adından istenebilmesine izin veren bir mekanizmadır. Bir web sayfası, özgürce kökler arası resimleri, stil sayfalarını, betikleri ve videoları ekleyebilmektedir. Ancak, bazı “alanlar arası” istekler, özellikle Ajax istekleri, Aynı Kök Politikası nedeniyle varsayılan olarak yasaklanmıştır.

Siteler arası betik çalıştırma, genellikle web uygulamalarında görülen, genellikle HTML enjeksiyonu zafiyetiyle birlikte ortaya çıkan veya Java Script kullanan bazı aplikasyonlarda bulunan bir güvenlik açıklığıdır. XSS, diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci taraflı Java Script kodunun enjekte edilmesine imkân verir. Siteler arası betik çalıştırma açıklığı, saldırganlar tarafından aynı kök politikası gibi bazı erişim kontrollerini atlatmak ve hedef adresin oturum katmanını ele geçirmek için kullanılabilmektedir. Web sayfaları üzerinde gerçekleştirilen siteler arası betik çalıştırma saldırıları, 2007 itibarıyla Symantec'in raporladığı tüm güvenlik açıklıklarının yaklaşık olarak %84'ünü oluşturmaktadır. Zafiyet içeren sitenin işlediği verinin hassasiyetine ve site sahibi tarafından uygulanan güvenlik tedbirlerine bağlı olarak, etkisi ufak bir aksamadan önemli bir güvenlik riskine kadar değişebilmektedir.

Bir web geliştiricisi, istemci-sunucu modeli kullanarak World Wide Web uygulamalarının geliştirilmesinde uzmanlaşmış veya özel olarak ilgilenen bir programcıdır. Uygulamalar genellikle istemcide, PHP, ASP'de HTML, CSS ve JavaScript kullanır. NET (C#), Python, Node.js, sunucuda Go veya Java ve istemci ile sunucu arasındaki iletişim için http bağlantılarını kullanmaktadır. Bir web içerik yönetim sistemi genellikle web uygulamalarını geliştirmek ve sürdürmek için kullanılır.

<span class="mw-page-title-main">Web şablon sistemi</span>

Web yayıncılığı'ndaki web şablon sistemi, web tasarımcılarının ve geliştiricilerin, bir aramanın sonuçları gibi özel web sayfa'larını otomatik oluşturmak için web şablonları ile çalışmasına olanak tanır. Bu, dinamik öğeleri web isteği parametrelerine dayalı olarak tanımlarken statik web sayfası öğelerini yeniden kullanır. Web şablonları statik içeriği destekleyerek temel yapı ve görünüm sağlar. Geliştiriciler içerik yönetim sistemlerinden, Web uygulama iskeletlerinden ve HTML düzenleyicilerinden şablonları kullanabilir.

HTTP 403, istenen kaynağa erişimin yasak olduğu anlamına gelen bir HTTP durum kodudur. Bu kodun gösterilmesinin anlamı: sunucu isteği anladı, ancak yerine getirmeyecek.

Web'de kullanıcı aracısı, kullanıcı adına hareket eden ve "Web içeriğini alan, işleyen ve son kullanıcı etkileşimini kolaylaştıran" herhangi bir yazılımdır. Bu nedenle kullanıcı aracısı özel bir yazılım aracısı türüdür.

Next.js, React tabanlı web uygulamaları için sunucu tarafında işleme ve statik web sitesi oluşturma sağlayan, Vercel tarafından oluşturulmuş açık kaynaklı bir Web geliştirme platformudur.