Origin-Agent-Cluster başlığıyla performans yalıtımı isteme

Alan genelinde komut dosyası kullanımını sınırlamak ve tarayıcıdan özel kaynaklar istemek için yeni bir HTTP yanıtı başlığı.

Domenic Denicola
Domenic Denicola

Origin-Agent-Cluster, tarayıcıya aynı siteler arası kaynaklar arasında eşzamanlı komut dosyası erişimini engellemesi talimatını veren yeni bir HTTP yanıt başlığıdır. Tarayıcılar, kaynağınızın kendine özel ayrı kaynaklara (ör. özel işlem) sahip olması gerektiğine dair ipucu olarak Origin-Agent-Cluster kullanabilir.

Tarayıcı uyumluluğu

Origin-Agent-Cluster başlığı şu anda yalnızca Chrome 88 ve sonraki sürümlerde uygulanmaktadır. Bu araç, Mozilla Firefox'tan prototip oluşturmaya değer olduğunu belirten temsilcileriyle yakın iş birliğiyle tasarlanmış olup Safari tarafından kullanılan tarayıcı motoru olan WebKit'in temsilcilerinden ön olarak olumlu bir tepki almıştır.

Ancak bu süre zarfında, Origin-Agent-Cluster üst bilgisini tüm kullanıcılarınıza dağıtmakta herhangi bir sorun yoktur. Anlamayan tarayıcılar bunu yoksayar. Ayrıca kaynak içeren veya kaynaklarla ilişkili aracı kümelerindeki sayfalar, site içeren veya sitelerle ilişkili olanlardan (varsayılan) daha az şey yapabildiğinden, birlikte çalışabilirlik ile ilgili olarak endişelenmenizi gerektirecek bir sorun yoktur.

Tarayıcılar neden aynı site kaynaklarını otomatik olarak ayıramıyor?

Web aynı kaynak politikası temelinde oluşturulmuştur. Bu politika, dokümanların ve komut dosyalarının başka bir kaynaktan kaynaklarla etkileşim kurma şeklini kısıtlayan bir güvenlik özelliğidir. Örneğin, https://a.example adresinde barındırılan bir sayfanın kaynağı https://b.example veya https://sub.a.example adresindeki başka bir kaynaktır.

Perde arkasında tarayıcılar, başlangıç noktalarının sağladığı ayrımı farklı şekillerde kullanır. Eskiden, farklı kaynaklar birbirlerinin verilerine erişemese bile işletim sistemi iş parçacıkları, işlemler ve bellek ayırma gibi kaynakları paylaşmaya devam ederlerdi. Yani, bir sekme yavaşsa diğer tüm sekmeleri yavaşlatırdı. Veya bir sekme çok fazla bellek kullanırsa tüm tarayıcı kilitlenir.

Günümüzde tarayıcılar daha gelişmiş ve farklı kaynakları farklı süreçlere ayırmaya çalışıyor. Bunun tam olarak nasıl çalıştığı tarayıcıya göre değişir: Çoğu tarayıcıda sekmeler arasında bir miktar mesafe vardır, ancak tek bir sekme içindeki farklı iframe'ler aynı işlemi paylaşabilir. İşlemler bir miktar bellek ek yüküne yol açtığından, çok fazla sayıda üretmeyi önlemek için buluşsal yöntemler kullanırlar: Örneğin, Firefox'un kullanıcı tarafından yapılandırılabilen bir işlem sınırı vardır ve Chrome, davranışını masaüstü (belleğin daha fazla olduğu yer) ve mobil (az bulunan) arasında değiştirir.

Bu buluşsal yöntemler mükemmel değildir. Bu ağlar önemli bir sınırlamayla karşı karşıya kalırlar: Aynı kaynak politikasında https://sub.a.example ve https://a.example gibi alt alan adlarının birbiriyle konuşmasına izin veren istisnalar bulunduğundan tarayıcılar alt alanları otomatik olarak birbirinden ayıramaz.

Bu varsayılan davranışa "site içeren veya sitelerle ilişkili aracı kümeleri" adı verilir. Yani tarayıcı, sayfaları sitesine göre gruplandırır. Yeni Origin-Agent-Cluster üstbilgisi, tarayıcıdan belirli bir sayfa için bu varsayılan davranışı değiştirmesini ister. Bunu, sayfayı kaynak veya kaynaklarla ilişkili bir aracı kümesine yerleştirerek yalnızca aynı kaynağa sahip diğer sayfalarla gruplandırılır. Özellikle aynı sitenin çapraz kaynak sayfaları, aracı kümeden hariç tutulur.

Bu isteğe bağlı ayırma, tarayıcıların bu yeni kaynak içeren veya kaynaklarla ilişkili aracı kümelerine, diğer kaynaklara ait kaynaklarla birleştirilmeyen kendi kaynaklarını vermesini sağlar. Örneğin, bu tür sayfaların kendi işlemleri olabilir veya ayrı iş parçacığı şeklinde planlanabilirler. Sayfanıza Origin-Agent-Cluster üst bilgisini ekleyerek, tarayıcıya sayfanın bu tür özel kaynaklardan yararlanabileceğini belirtmiş olursunuz.

Ancak, ayırma işlemini gerçekleştirmek ve bu avantajlardan yararlanmak için tarayıcının bazı eski özellikleri devre dışı bırakması gerekir.

Kaynak içeren veya kaynaklarla ilişkili sayfalar neler yapamaz?

Sayfanız kaynak içeren veya kaynaklarla ilişkili aracı kümesindeyken, önceden kullanılabilir olan aynı site genelindeki çapraz kaynak sayfalarla iletişim kurmak için bazı olanaklardan feragat edersiniz. Özellikle:

  • Artık document.domain özelliğini ayarlayamazsınız. Bu, normalde aynı sitedeki çapraz kaynak sayfalarının birbirlerinin DOM'una eşzamanlı olarak erişmelerine izin veren eski bir özelliktir, ancak kaynak içeren veya kaynaklarla ilişkili aracı kümelerinde bu özellik devre dışıdır.

  • Artık postMessage() aracılığıyla aynı sitenin çapraz kaynak sayfalarına WebAssembly.Module nesneleri gönderemezsiniz.

  • (Yalnızca Chrome) Artık aynı sitelerin çapraz kaynak sayfalarına SharedArrayBuffer veya WebAssembly.Memory nesneleri gönderemezsiniz.

Kaynak içeren veya kaynaklarla ilişkili aracı kümeleri ne zaman kullanılır?

Origin-Agent-Cluster başlığından en çok faydalanan kaynaklar:

  • Mümkün olduğunda kendi özel kaynaklarıyla en iyi performansı gösterir. Performans yoğun oyunlar, video konferans siteleri veya multimedya oluşturma uygulamaları bunlara örnek olarak gösterilebilir.

  • Farklı kökenli ancak aynı siteye sahip, yoğun kaynak kullanan iframe'ler içerir. Örneğin, https://mail.example.com https://chat.example.com iframe'leri yerleştirirse kaynak anahtarlama https://mail.example.com/, sohbet ekibi tarafından yazılan kodun posta ekibi tarafından yazılan kodla kazara karışmasını önler ve tarayıcıya, bunları bağımsız olarak programlaması ve birbirleri üzerindeki performans etkisini azaltmak için ayrı işlemler yapması konusunda ipucu verebilir.

  • Farklı kaynaklı, aynı sitedeki sayfalara yerleştirilmesi beklenir ancak yoğun kaynak kullanıldığını bilir. Örneğin https://customerservicewidget.example.com, görüntülü sohbet için çok fazla kaynak kullanmayı bekliyorsa ve https://*.example.com boyunca çeşitli kaynaklarda yerleşik olacaksa bu widget'ı yöneten ekip, yerleştirenler üzerindeki performans etkisini azaltmak için Origin-Agent-Cluster üst bilgisini kullanabilir.

Ayrıca, yukarıda ele alınan nadiren kullanılan çapraz kaynak iletişim özelliklerini devre dışı bırakmanın sorun yaratmayacağından ve sitenizde HTTPS kullanıldığından emin olmanız gerekir.

Ancak nihayetinde bunlar sadece bir yönergedir. Kaynak içeren veya kaynaklarla ilişkili aracı kümelerinin sitenize yardımcı olup olmayacağına ölçümlerle karar verilir. Özellikle, kaynak anahtarlama işleminin nasıl bir etkisinin olduğunu görmek için Web Verilerinizi ve potansiyel olarak bellek kullanımınızı ölçmek istersiniz. (Oynatılan işlem sayısının artması, işlem başına daha fazla bellek ek yüküne neden olabileceğinden özellikle bellek kullanımı potansiyel bir endişe kaynağıdır.) Yalnızca kaynak anahtarlama işlevini kullanıp en iyi sonucu elde etmeyi ummakla yetinmemelisiniz.

Bunun kökler arası erişime kapalı olmayla ilgisi nedir?

Origin-Agent-Cluster başlığı aracılığıyla aracı kümelerinin kaynak anahtarlama işlemi, Cross-Origin-Opener-Policy ve Cross-Origin-Embedder-Policy üst bilgileri aracılığıyla çapraz kaynak izolasyonu ile ilişkilidir ancak ondan ayrıdır.

Kendisini kökler arası erişime kapalı hale getiren tüm siteler de Origin-Agent-Cluster üstbilgisini kullanırken olanla aynı siteler arası iletişim özelliklerini devre dışı bırakır. Bununla birlikte, Origin-Agent-Cluster üst bilgisi, kaynak ayırma bulgularını değiştirmesi için tarayıcıya ek bir ipucu olarak kaynaklar arası erişime kapalı olmaya devam edebilir. Bu nedenle, kökler arası erişime kapalı olan sayfalarda bile Origin-Agent-Cluster üst bilgisini uygulamayı ve sonuçları ölçmeyi göz önünde bulundurmalısınız.

Origin-Agent-Cluster üstbilgisi nasıl kullanılır?

Origin-Agent-Cluster üstbilgisini kullanmak için web sunucunuzu aşağıdaki HTTP yanıt üst bilgisini gönderecek şekilde yapılandırın:

Origin-Agent-Cluster: ?1

?1 değeri, boole true değeri için yapılandırılmış başlık söz dizimidir.

Bu üstbilgiyi yalnızca bazı sayfalara değil, kaynağınızdan gelen tüm yanıtlarda göndermeniz önemlidir. Aksi takdirde, tarayıcı bir kaynak anahtar ekleme isteğini "hatırladığında" ve bu nedenle, bu isteği istemeyen sayfalarda bile kaynak anahtarları olarak tutarsız sonuçlar alabilirsiniz. Ya da tam tersi: Bir kullanıcının ziyaret ettiği ilk sayfada başlık yoksa tarayıcı, kaynağınızın kaynak içeren veya kaynaklarla ilişkili olmasını istemediğini hatırlar ve sonraki sayfalarda bulunan başlığı yoksayar.

Tarayıcı neden her zaman üstbilgiye saygı göstermiyor?

Bu "bellek", başlangıç noktası için anahtarlamanın tutarlılığını sağlamak amacıyla kullanılır. Bir kaynaktaki bazı sayfalarda kaynak içeren anahtar kelimeler bulunurken diğerlerinde böyle bir kaynak bulunmadığında, farklı aracı kümelerine yerleştirilen ve bu nedenle birbiriyle konuşmalarına izin verilmeyen aynı kaynak içeren iki sayfanız olabilir. Bu hem web geliştiricileri hem de tarayıcının dahili kullanıcıları için oldukça tuhaf olacaktır. Bu nedenle, belirli bir kaynak için önceden görülebilenlerle tutarsızsa Origin-Agent-Cluster spesifikasyonu, üst bilgiyi yoksayar. Chrome'da bu durum bir konsol uyarısıyla sonuçlanır.

Bu tutarlılık; tamamı window.opener, frames[0] veya window.parent gibi mekanizmalar üzerinden birbirine ulaşabilen sekmelerden, pencerelerden veya iframe'lerden oluşan bir göz atma bağlam grubunu kapsar. Bu, bir kaynağın kaynak veya site anahtarı oluşturulduktan sonra (tarayıcı tarafından başlığı görme veya görmeme), bunun değiştirilmesi için hiçbir şekilde eski sekmeye bağlı olmayan tamamen yeni bir sekmenin açılmasını gerektirir.

Bu ayrıntılar, Origin-Agent-Cluster üstbilgisinin test edilmesinde önemli olabilir. Sitenize ilk kez eklerken sayfayı yeniden yüklemek işe yaramaz. Sekmeyi kapatıp yeni bir tane açmanız gerekir.

Origin-Agent-Cluster üst bilgisinin uygulanıp uygulanmadığını kontrol etmek için JavaScript window.originAgentCluster özelliğini kullanın. Bu, başlığın (veya çapraz kaynak izolasyonu gibi diğer mekanizmaların) kaynak anahtarlamaya neden olduğu durumlarda true, yapmadığında false ve Origin-Agent-Cluster üst bilgisini uygulamayan tarayıcılarda undefined olacaktır. Bu verilerin analiz platformunuza kaydedilmesi, sunucunuzu doğru yapılandırdığınızdan emin olmanızı sağlayabilir.

Son olarak, Origin-Agent-Cluster üst bilgisinin yalnızca güvenli bağlamlarda, örneğin HTTPS sayfalarında veya http://localhost üzerinde çalışacağını unutmayın. Yerel ana makine olmayan HTTP sayfaları kaynak içeren veya kaynaklarla ilişkili aracı kümelerini desteklemez.

Kaynak anahtarlama bir güvenlik özelliği değildir

Kaynak içeren veya kaynaklarla ilişkili aracı kümesi kullanmak, kaynağınızı aynı siteler arası kaynaklar arasında eşzamanlı erişimden izole etse de Cross-Origin-Resource-Policy ve Cross-Origin-Opener-Policy gibi güvenlikle ilgili üst bilgileri koruma sağlamaz. Özellikle, Spectre gibi yan kanal saldırılarına karşı güvenilir bir koruma değildir.

Bu biraz şaşırtıcı olabilir çünkü kaynak anahtarlama bazen kaynağınızda kendi sürecinin oluşmasına neden olabilir. Ayrı süreçler ise yan kanal saldırılarına karşı önemli bir savunma işlevi görür. Ancak Origin-Agent-Cluster başlığının bu konuda yalnızca bir ipucu olduğunu unutmayın. Tarayıcının kaynağınız için ayrı bir işlem yapma yükümlülüğü yoktur ve çeşitli nedenlerle bunu yapmayabilir:

  • Tarayıcı, bunu yapmak için gereken teknolojiyi uygulamayabilir. Örneğin, şu anda Safari ve Firefox, kendi işlemlerine ayrı sekmeler koyabiliyor, ancak bunu iframe'ler için henüz yapamıyorlar.

  • Tarayıcı, ayrı bir işlemin ek yüküne değmeyeceğine karar verebilir. Örneğin, düşük bellekli Android cihazlarda veya Android Web Görünümü'nde Chrome mümkün olduğunca az işlem kullanır.

  • Tarayıcı, Origin-Agent-Cluster üst bilgisinde belirtilen isteği yerine getirmek isteyebilir ancak bunu işlemlerden farklı yalıtım teknolojileri kullanarak yapabilir. Örneğin, Chrome bu tür performans yalıtımı için işlemler yerine iş parçacıklarını kullanarak keşfetmektedir.

  • Kullanıcı veya farklı bir sitede çalışan kod, kaynağınızdaki site içeren veya sitelerle ilişkili bir sayfaya zaten gitmiş olabilir. Bu da tutarlılık garantisinin devreye girmesine ve Origin-Agent-Cluster başlığının tamamen yok sayılmasına neden olur.

Bu nedenlerle, kaynak içeren veya kaynaklarla ilişkili aracı kümelerini bir güvenlik özelliği olarak düşünmemek önemlidir. Bunun yerine, kaynağınızın özel kaynaklardan yararlanabileceğini (ve bu sayede belirli özelliklerden vazgeçmeye istekli olduğunuzu) göstererek tarayıcının kaynak ayırmaya öncelik vermesine yardımcı olmanın bir yoludur.

Geri bildirim

Origin-Agent-Cluster üst bilgisini kullanıyorsanız veya kullanmayı düşünüyorsanız Chrome ekibi bunu öğrenmekten memnuniyet duyacaktır. Kamu yararınız ve desteğiniz, özellikleri önceliklendirmemize ve diğer tarayıcı satıcılarına ne kadar önemli olduklarını göstermemize yardımcı olur. @ChromiumDev adresine tweet atarak Chrome DevRel'e düşüncelerinizi ve deneyimlerinizi bildirin.

Spesifikasyon veya özelliğin nasıl çalıştığıyla ilgili ayrıntılar hakkında başka sorularınız varsa HTML Standart GitHub deposunda sorun bildiriminde bulunabilirsiniz. Chrome'un uygulanmasıyla ilgili herhangi bir sorunla karşılaşırsanız Bileşenler alanı Internals>Sandbox>SiteIsolation olarak ayarlanmış şekilde new.crbug.com adresinde hata bildiriminde bulunabilirsiniz.

Daha fazla bilgi

Kaynak içeren veya kaynaklarla ilişkili aracı kümeleri hakkında daha fazla bilgi edinmek için aşağıdaki bağlantılardan ayrıntılı bilgi edinebilirsiniz: