HTTP 103 Early Hints, sunucunun bir isteğin son HTTP yanıtını henüz hazırlamadığı sırada istemciye erken başlık ipuçları göndermesine olanak tanıyan 1xx sınıfı bir bilgi yanıtıdır. En yaygın kullanım, son HTML yanıtı gelmeden önce sayfanın görünümü için gereken stil dosyalarını veya işlevlerini çalıştıran betikleri Link başlığıyla bildirmektir.

Bu mekanizma, uygulama sunucusu veri tabanı sorgularını işlerken veya başka bir hizmetten yanıt beklerken tarayıcının bu sürenin bir bölümünde bağlantı kurma veya kaynak isteme işlemlerine başlayabilmesini amaçlar. 103, sayfanın asıl yanıtı değildir; son durum kodu ve son yanıt başlıkları daha sonra gelir.

103 Yanıtının İstemci ile Sunucu Arasındaki Akışı

Erken ipucu yoksa ve gerekli kaynaklar başka bir yoldan önceden bilinmiyorsa, tarayıcı bunları son yanıtın Link başlıklarından veya gelen HTML içeriğinden öğrenir. Dinamik bir sayfada ise sunucunun son yanıtı hazırlaması veri tabanı sorguları, uygulama mantığı veya başka bir HTTP sunucusundan yanıt bekleme gibi nedenlerle zaman alabilir.

103 Early Hints bu aralığı değerlendirmeyi amaçlar. Sunucu, son yanıt henüz kesinleşmeden önce istemciye bazı başlık alanlarını gönderir; ardından asıl işlemleri tamamlayıp son HTTP yanıtını iletir. İstemci, erken gelen bilgiyi yalnız hazırlık ve performans optimizasyonu amacıyla değerlendirebilir.

  1. İstemci bir HTTP isteği gönderir.
  2. Sunucu, son yanıtı hazırlarken önceden bildiği yararlı kaynak ipuçlarını 103 yanıtıyla iletir.
  3. İstemci desteklediği bilgileri henüz kesinleşmemiş ipuçları olarak değerlendirir ve uygun kaynak işlemlerini başlatabilir.
  4. Sunucu daha sonra son durum kodu, son başlıklar ve varsa içerikle gerçek yanıtı gönderir.

Link Başlığı ve Erken Kaynak İpuçları

RFC 8297, son yanıtta bulunması beklenen başlık alanlarının 103 ile erken gönderilmesini tanımlar. Link başlığındaki preload ilişkisi, tarayıcıya belirtilen kaynağı önceden isteme ipucu verir. Örneğin aşağıdaki alan bir stil dosyasını bildirir:

Link: </assets/site.css>; rel=preload; as=style

as=style, kaynağın stil dosyası olarak kullanılacağını belirtir. Tarayıcı bu ipucunu işlerse son HTML yanıtı gelmeden dosyayı istemeye başlayabilir. Link başlığında preconnect kullanılması ise kaynağı indirmek yerine ilgili sunucuyla bağlantıyı önceden kurma hazırlığı içindir.

Buradaki kritik nokta, 103'ün kaynağın kendisini taşımamasıdır. Erken yanıt yalnız bir ipucu verir; kaynağın istenip istenmeyeceğini ve ipucunun nasıl kullanılacağını istemci belirler. Bu yönüyle, sunucunun istemci ayrı bir kaynak isteği göndermeden kaynak yanıtını iletebildiği HTTP/2 server push mekanizmasından farklıdır.

103 ile Son HTTP Yanıtı Arasındaki Farklar

103 Early Hints bir son yanıt değildir. HTTP semantiğinde 1xx sınıfı yanıtlar, istenen işlem tamamlanmadan önce gönderilen geçici bilgi yanıtlarıdır ve içerik veya ileti sonunda yer alan trailer alanlarını taşımaz. İstemci, 103 aldıktan sonra gerçek sonucu belirleyen son yanıtı beklemeye devam eder.

103 içinde gönderilen bir başlığın son yanıtta kesinlikle aynı biçimde bulunması da zorunlu değildir. Sunucu daha sonra erken ipucunun doğru olmadığını öğrenebilir; bu nedenle istemci erken başlıkları kesin değerler değil, ipuçları olarak değerlendirmelidir. Son yanıtın başlıkları ve durum kodu kendi başına geçerlidir.

Bir İstekte Birden Fazla 103 Kullanılabilir

HTTP protokolü, bir isteğin son yanıtından önce birden fazla 103 gönderilmesine izin verir. Ancak bu izin, istemcinin bütün erken yanıtları işleyeceği anlamına gelmez. HTML standardına göre bir sayfa gezinmesinde yalnız ilk 103 yanıtı işlenir; bu nedenle tarayıcının kullanmasını istediğiniz kritik ipuçlarını sonraki bir 103 yanıtına bırakmayın.

Performans Kazancı Hangi Koşullarda Ortaya Çıkar?

Early Hints en çok, son yanıtın üretilmesi için belirgin bir sunucu bekleme süresi varken ve sayfanın kritik kaynakları bu süre dolmadan güvenilir biçimde bilinebiliyorsa anlam kazanır. Böyle bir durumda tarayıcı, daha sonra ihtiyaç duyacağı kaynağa ilişkin ağ işlemlerini sunucunun uygulama işini bitirmesiyle kısmen paralel yürütebilir.

Bu, her isteği otomatik olarak hızlandıracağı anlamına gelmez. Son yanıt zaten çok hızlı hazırlanıyorsa, istemci ipucunu kullanmıyorsa veya belirtilen kaynak gerçekte kritik değilse kazanılabilecek süre küçük olabilir. Elde edilen zaman kazancı, sunucu gecikmesine, ağ koşullarına, önbellek durumuna ve istemci davranışına göre değişir.

Yanlış veya Gereksiz İpuçlarının Maliyeti

Erken başlatılan her işlem yararlı değildir. Gereksiz bir kaynağın önden istenmesi bant genişliği tüketebilir, bağlantı ve önceliklendirme kaynaklarını meşgul edebilir ve gerçekten gerekli kaynaklarla rekabet yaratabilir. Sunucu, sayfada kullanılacağı önceden bilinen ve erken yüklenmesi gecikmeyi azaltabilecek az sayıdaki kaynağı bildirmelidir.

Erken bağlantılar gizlilik açısından da risk oluşturabilir. Başka bir alan adına veya üçüncü taraf sunucuya yönlendiren ipucu, kaynağın gerekli olduğu henüz kesinleşmeden tarayıcının hedefle bağlantı kurmasına neden olabilir. Bu durumda ziyaretçinin IP adresi gibi bağlantı verileri hedefe gereğinden önce ulaşır. Gizlilik riskini sınırlamak için sunucu yalnız gerçekten gerekli dış kaynaklar hakkında erken ipucu göndermelidir.

Early Hints İçin Güvenlik Başlıkları

CSP (Content-Security-Policy), tarayıcının hangi kaynakları yükleyip kullanabileceğini kısıtlayan güvenlik kurallarını bildirir. 103 içindeki CSP, erken kaynak isteklerini sınırlandırabilir; fakat son HTML yanıtının CSP kurallarının yerine geçmez. Son yanıtta daha sıkı bir kural gelmesi, erken başlatılmış bir isteği geçmişe dönük olarak engellemez. Sayfanın güvenlik kuralları son yanıtta da gönderilmelidir.

103 Early Hints İçin Aracı ve İstemci Uyumluluğu

İstek ile kaynak sunucu arasında, isteği sunucu adına karşılayıp arkadaki hizmete ileten reverse proxy veya yanıtları saklayan bir HTTP önbelleği bulunabilir. HTTP semantiği, 1xx yanıtlarının son yanıttan önce gelebileceğini tanımlar. Bir proxy, yalnız kendi talep ettiği 1xx yanıtları hariç diğer geçici yanıtları istemciye iletmelidir. Uygulamada 103'ün yararlı olabilmesi için istemciye kadar olan yolun bu yanıtı doğru işlemesi önem taşır.

RFC 8297 ayrıca bazı HTTP/1.1 istemcilerinin bilgi yanıtlarını yanlış biçimde son yanıt gibi ele alabileceği güvenlik riskine dikkat çeker. 103, protokol olarak HTTP/1.1 ile de kullanılabilir; ancak tarayıcılarda uyumluluk nedeniyle çoğunlukla HTTP/2 veya HTTP/3 üzerinden uygulanır. Sunucu ve aracı yazılımında 103 desteğinin bulunması, tarayıcının bu ipuçlarını mutlaka kullanacağı anlamına gelmez. Devreye almadan önce gerçek tarayıcı ve bağlantı üzerinden erken kaynak isteğinin başlayıp başlamadığını kontrol edin.