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

Alan genelinde komut dosyası oluşturmayı sınırlandırmak 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ı sitenin çapraz kaynak sayfaları arasında eşzamanlı komut dosyası erişimini önlemesi için talimat veren yeni bir HTTP yanıtı başlığıdır. Tarayıcılar, kaynağınızın özel bir işlem gibi ayrı, kendine ait kaynaklara sahip olması gerektiğine dair ipucu olarak Origin-Agent-Cluster kullanabilir.

Tarayıcı uyumluluğu

Şu anda Origin-Agent-Cluster başlığı yalnızca Chrome 88 ve sonraki sürümlerde uygulanmaktadır. Bu araç, onu değer prototip oluşturmaya değer taşıyan Mozilla Firefox temsilcileriyle yakın işbirliği içinde tasarlanmıştır ve Safari'nin kullandığı tarayıcı motoru WebKit'in temsilcilerinden ön olumlu bir onay alınmıştır.

Ancak bu süre zarfında Origin-Agent-Cluster üstbilgisinin bugün tüm kullanıcılarınıza dağıtılmasıyla ilgili herhangi bir sorun yok. Anlamayan tarayıcılar onu yok sayar. Kaynak içeren veya kaynaklarla ilişkili aracı kümelerindeki sayfalar, site içeren veya sitelerle ilişkili olanlardan daha az şey yapabildiği için (varsayılan) birlikte çalışabilirlik konusunda endişelenmemiz gerekmez.

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

Web, belgelerin ve komut dosyalarının başka bir kaynaktaki kaynaklarla etkileşime girme biçimini kısıtlayan bir güvenlik özelliği olan aynı kaynak politikası üzerine kurulmuştur. Örneğin, https://a.example adresinde barındırılan bir sayfa https://b.example adresindeki veya https://sub.a.example adresindeki kaynaktan farklı bir kaynaktadır.

Arka planda tarayıcılar, kaynakların birbirinden farklı şekillerde sağladığı ayırmayı kullanır. Eski günlerde, birbirinden farklı kaynaklar birbirlerinin verilerine erişemeyecek olsa da işletim sistemi iş parçacıkları, işlemler ve bellek ayırma gibi kaynakları paylaşmaya devam ediyordu. Yani, bir sekme yavaşsa diğer tüm sekmeleri de yavaşlatıyordu. Veya bir sekme çok fazla bellek kullanılırsa tüm tarayıcının kilitlenmesine neden olabilir.

Bugünlerde tarayıcılar daha sofistikedir ve farklı kaynakları farklı süreçlere ayırmaya çalışmaktadır. Bunun tam olarak işleyiş şekli tarayıcıya göre değişir: Çoğu tarayıcıda sekmeler arasında belirli bir düzeyde ayrım vardır, ancak tek bir sekme içindeki farklı iframe'ler aynı işlemi paylaşabilir. İşlemler, ek bellek yükü gerektirdiğinden çok fazla sayıda üretilmesini önlemek için buluşsal yöntemler kullanır: Örneğin, Firefox'un kullanıcı tarafından yapılandırılabilir bir işlem sınırı vardır ve Chrome'un davranışı masaüstü (bellek miktarı daha fazladır) ile mobil (kıdemsiz) arasında değişir.

Bu buluşsal yöntemler mükemmel değildir. Ayrıca, önemli bir sınırlama vardır: https://sub.a.example ve https://a.example gibi alt alanların birbirleriyle iletişim kurmasına izin veren aynı kaynak politikası istisnaları olduğundan, tarayıcılar alt alan adlarını otomatik olarak 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 başlığı, tarayıcıdan belirli bir sayfa için bu varsayılan davranışı değiştirmesini ister. Bunu, sayfayı kaynak içeren veya kaynaklarla ilişkili bir aracı kümesine yerleştirerek sayfa yalnızca tam olarak aynı kaynağa sahip diğer sayfalarla gruplandırılmasını sağlar. Özellikle, aynı sitenin kaynaklar arası sayfaları aracı kümesinden hariç tutulur.

Bu ayırma, tarayıcıların bu yeni kaynak içeren veya kaynaklarla ilişkili aracı kümelerine kendi özel kaynaklarını vermesini sağlar. Bu kaynaklar, diğer kaynaklarla birleştirilemez. Örneğin, bu tür sayfaların kendi işlemleri olabilir veya ayrı ileti dizilerinde planlanabilirler. Sayfanıza Origin-Agent-Cluster başlığını ekleyerek sayfanın bu özel kaynaklardan yararlanacağını tarayıcıya belirtirsiniz.

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

Kaynak içeren veya kaynaklarla ilişkili sayfaların yapamayacağı işlemler

Sayfanız kaynak içeren veya kaynaklarla ilişkili bir aracı kümesinde olduğunda, daha önce kullanılabilen aynı site arası kaynak sayfalarıyla konuşma imkanını kaybedersiniz. Özellikle:

  • Artık document.domain değerini ayarlayamazsınız. Bu, normalde aynı sitedeki kaynaklar arası sayfaların birbirlerinin DOM'sine eşzamanlı olarak erişmesine izin veren eski bir özelliktir ancak kaynak içeren veya kaynaklarla ilişkili aracı kümelerinde devre dışı bırakılmıştır.

  • Artık postMessage() üzerinden aynı sitenin diğer çapraz kaynak sayfalarına WebAssembly.Module nesneleri gönderemezsiniz.

  • (Yalnızca Chrome) Artık aynı sitenin diğer ç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 şunlardır:

  • Mümkün olduğunda kendi özel kaynaklarından en iyi performansı elde edin. Örnekler arasında performans yoğun oyunlar, video konferans siteleri veya multimedya oluşturma uygulamaları yer alır.

  • Kaynağı farklı, ancak aynı siteye sahip, kaynağı yoğun bir şekilde kullanan iframe'ler içerir. Örneğin, https://mail.example.com, https://chat.example.com iframe'ler yerleştirirse kaynak anahtarlama https://mail.example.com/, sohbet ekibi tarafından yazılan kodun posta ekibi tarafından yazılan kodu yanlışlıkla engellememesini sağlar ve tarayıcıya, bunları ayrı ayrı planlamaları ve birbirleri üzerindeki performans etkilerini azaltmaları için ayrı işlemler verme konusunda ipucu verebilir.

  • Aynı sitenin farklı bir kaynağına sahip sayfalara yerleştirilmesini bekleyin ancak bu sayfalar kaynak yoğun olduğundan emin olun. Örneğin, https://customerservicewidget.example.com görüntülü sohbet için çok fazla kaynak kullanmayı bekliyorsa ve https://*.example.com genelinde çeşitli kaynaklara yerleştirilecektir. Bu widget'ı sunan ekip, Origin-Agent-Cluster üstbilgisini kullanarak yerleştirmeciler üzerindeki performans etkisini azaltabilir.

Ayrıca, yukarıda açıklanan nadiren kullanılan kaynaklar arası iletişim özelliklerinin devre dışı bırakılmasında bir sorun olmadığından ve sitenizin HTTPS kullandığından emin olmanız gerekir.

Ancak sonuçta bunlar sadece birer yönerge. Kaynak içeren veya kaynaklarla ilişkili aracı kümelerinin sitenize yardımcı olup olmayacağı, nihayetinde ölçümlerle belirlenir. Özellikle kaynak anahtarı oluşturmanın nasıl bir etkisi olduğunu görmek için Web Verilerinizi ve potansiyel olarak bellek kullanımınızı ölçmek istersiniz. (Süreçteki işlem sayısının artması, işlem başına daha fazla bellek yüküne neden olabileceğinden, özellikle bellek kullanımı potansiyel bir endişedir.) Kaynak anahtarlama özelliğini kullanıma sunup en iyisinin gerçekleşmesini umut etmekle yetinmemelisiniz.

Bunun kökler arası erişime kapalı olması ile nasıl bir ilişkisi var?

Origin-Agent-Cluster başlığı aracılığıyla aracı kümelerinin kaynak anahtarı oluşturma işlemi, Cross-Origin-Opener-Policy ve Cross-Origin-Embedder-Policy başlıkları aracılığıyla kaynaklar arası izolasyon ile ilişkili ancak bundan ayrıdır.

Kendisini kökler arası erişime kapalı yapan tüm siteler, Origin-Agent-Cluster üstbilgisinin kullanımıyla aynı siteler arası kaynaklar arası iletişim özelliklerini de devre dışı bırakır. Bununla birlikte Origin-Agent-Cluster üstbilgisi, tarayıcıya kaynak ayırma buluşsal yöntemlerini değiştirmesi için ek bir ipucu olarak, kaynaklar arası izolasyonun üstünde yine de yararlı olabilir. Bu nedenle, zaten çapraz kökler arası erişime kapalı olan sayfalarda bile Origin-Agent-Cluster başlığını uygulamayı ve sonuçları ölçmeyi düşünmeniz gerekir.

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

Origin-Agent-Cluster başlığını kullanmak için web sunucunuzu aşağıdaki HTTP yanıt başlığını 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ızdaki tüm yanıtlara göndermeniz önemlidir. Aksi takdirde, tarayıcının kaynak anahtarı isteği gördüğünü "hatırladığı" ve böyle bir istek almayan sayfalarda bile kaynak anahtarları kullanıldığında tutarsız sonuçlar alabilirsiniz. Ya da tam tersi: 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 bu başlığı yoksayar.

Tarayıcı neden her zaman başlığa uyum sağlayamıyor?

Bu "bellek"in amacı, kaynağa ait anahtarlama tutarlılığını sağlamaktır. Bir kaynaktaki bazı sayfalar kaynak içeren veya kaynaklarla ilişkili değilse, aynı kaynak içeren ve farklı aracı kümelerine yerleştirilmiş iki sayfanız olabilir. Bu nedenle, birbirleriyle iletişim kurmalarına izin verilmez. Bu, hem web geliştiricileri hem de tarayıcının içi için çok tuhaf olurdu. Bu nedenle, belirli bir kaynak için daha önce gördüğüyle tutarsızsa Origin-Agent-Cluster spesifikasyonu, üst bilgiyi yoksayar. Chrome'da bu işlem konsol uyarısıyla sonuçlanır.

Bu tutarlılık, tüm sekmeler, pencereler veya iframe'lerden oluşan ve window.opener, frames[0] veya window.parent gibi mekanizmalar aracılığıyla birbirine ulaşabilen göz atma bağlam grubu kapsamına alınır. Diğer bir deyişle, bir kaynağın kaynak veya site anahtarı düzenlemesi (tarayıcı, başlığı gören veya görmeyen tarayıcı tarafından) ayarlandıktan sonra, eski sekmeye hiçbir şekilde bağlı olmayan tamamen yeni bir sekmenin açılmasını gerektirir.

Bu ayrıntılar, Origin-Agent-Cluster başlığını test etmek için önemli olabilir. Sekmeyi sitenize ilk kez eklerken sayfayı yeniden yüklemek işe yaramaz. Sekmeyi kapatıp yeni bir sekme 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 kaynaklar arası kaynak izolasyonu gibi diğer mekanizmaların) kaynak anahtarı oluşturmaya neden olduğu durumlarda true, oluşmadığında false ve Origin-Agent-Cluster üstbilgisini uygulamayan tarayıcılarda undefined olur. Bu verilerin analiz platformunuza kaydedilmesi, sunucunuzu doğru şekilde yapılandırdığınızdan emin olmanızı sağlayacak değerli bir kontrol sunar.

Son olarak, Origin-Agent-Cluster üstbilgisinin yalnızca güvenli bağlamlarda (ör. HTTPS sayfalarında veya http://localhost) çalışacağını unutmayın. Yerel ana makine dışındaki HTTP sayfaları, kaynak içeren veya kaynaklarla ilişkili aracı kümelerini desteklemez.

Kaynak anahtarı oluşturma bir güvenlik özelliği değildir

Kaynak içeren veya kaynaklarla ilişkili aracı kümesi kullanmak, kaynağınızı aynı siteler arası kaynaklardaki eşzamanlı erişimden izole eder ancak Cross-Origin-Resource-Policy ve Cross-Origin-Opener-Policy gibi güvenlikle ilgili başlıkların 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ızın kendi sürecini izlemesine neden olabilir ve ayrı işlemler yan kanal saldırılarına karşı önemli bir savunma sağlar. Ancak Origin-Agent-Cluster başlığının bu anlamda yalnızca bir ipucu olduğunu unutmayın. Tarayıcının, kaynağınıza ayrı bir işlem sunma yükümlülüğü yoktur ve bunu çeşitli nedenlerle yapmayabilir:

  • Tarayıcı bunu yapacak teknolojiyi uygulamayabilir. Örneğin, Safari ve Firefox şu anda kendi işlemlerine ayrı sekmeler yerleştirebilir, ancak iframe'ler için bunu henüz yapamazlar.

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

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

  • Kullanıcı veya farklı bir sitede çalışan kod, kaynağınızdaki site içeren veya sitelerle ilişkili bir sayfaya daha önce gitmiş olabilir. Bu durumda, tutarlılık garantisi devreye girer ve Origin-Agent-Cluster üstbilgisi tamamen yoksayılır.

Bu nedenle, 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 yararlanacağına (ve bunun karşılığında belirli özelliklerden vazgeçmeye istekli olduğunuza) ipucu vererek tarayıcının kaynak tahsisini önceliklendirmesine yardımcı olur.

Geri bildirim

Origin-Agent-Cluster başlığını kullanıyorsanız veya kullanmayı düşünüyorsanız Chrome ekibi görüşlerinizi öğrenmek ister. Kamu yararı ve desteğiniz, özellikleri önceliklendirmemize ve diğer tarayıcı satıcılarına bunların ne kadar önemli olduğunu göstermemize yardımcı olmaktadır. @ChromiumDev adresine tweet atarak Chrome DevRel'in düşüncelerinizi ve deneyimlerinizi öğrenmesini sağlayın.

Spesifikasyon veya özelliğin nasıl çalıştığıyla ilgili ayrıntılar hakkında başka sorularınız varsa HTML Standard GitHub deposunda sorun bildirebilirsiniz. Chrome uygulamasıyla ilgili herhangi bir sorunla karşılaşırsanız Bileşenler alanını Internals>Sandbox>SiteIsolation olarak ayarlayarak 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ı bilgileri inceleyebilirsiniz: