Alan genelinde komut dosyası çalıştırmayı sınırlamak ve tarayıcıdan özel kaynaklar istemek için yeni bir HTTP yanıt üst bilgisi.
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
Origin-Agent-Cluster
başlığı şu anda yalnızca Chrome 88 ve sonraki sürümlerde uygulanmaktadır. Bu araç, onu değer prototip oluşturmaya değer veren 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çte Origin-Agent-Cluster
başlığını tüm kullanıcılarınıza dağıtabilirsiniz. Anlamayan tarayıcılar onu yok sayar. Ayrıca, kaynakla anahtarlanmış aracı kümelerindeki sayfalar, siteyle anahtarlanmış sayfalara (varsayılan) kıyasla daha az işlem yapabildiğinden endişelenmeniz gereken bir birlikte çalışabilirlik sorunu yoktur.
Tarayıcılar neden aynı site kaynaklarını otomatik olarak ayıramaz?
Web, dokümanların ve komut dosyalarının başka bir kaynaktaki kaynaklarla etkileşim şeklini 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
veya https://sub.a.example
adresindeki bir sayfadan farklı bir kaynaktadır.
Tarayıcılar, sahne arkasında köklerin sağladığı ayrımı farklı şekillerde kullanır. Eskiden ayrı kaynaklar birbirinin verilerine erişemese de işletim sistemi iş parçacıkları, işlemler ve bellek ayırma gibi kaynakları paylaşırdı. Bu da bir sekme yavaşsa diğer tüm sekmelerin de yavaşlayacağı anlamına geliyordu. Veya bir sekme çok fazla bellek kullanılırsa tüm tarayıcının kilitlenmesine neden olabilir.
Günümüzde tarayıcılar daha gelişmiş ve farklı kaynaklarını farklı işlemlere ayırmaya çalışıyor. Bu sürecin tam olarak işleyiş şekli tarayıcıya göre değişir: Çoğu tarayıcıda sekmeler arasında bir düzeyde ayrım vardır ancak tek bir sekmedeki farklı iframe'ler bir işlemi paylaşabilir. İşlemler bazı bellek yükü getirdiğinden, çok fazla işlem oluşturmamak için sezgisel yöntemler kullanılır. Örneğin, Firefox'ta kullanıcı tarafından yapılandırılabilir bir işlem sınırı vardır ve Chrome, davranışını masaüstü (bellek daha bol) ve mobil (bellek az) arasında değiştirir.
Bu sezgisel kurallar mükemmel değildir. Ayrıca, önemli bir sınırlamayla karşı karşıyadır: Aynı kaynak politikasında https://sub.a.example
ve https://a.example
gibi alt alan adlarının birbiriyle iletişim kurmasına izin veren istisnalar bulunduğundan tarayıcılar, alt alan adlarını otomatik olarak birbirinden ayıramaz.
Bu varsayılan davranışa "site içeren veya sitelerle ilişkili aracı kümeleri" denir. Yani tarayıcı, sayfaları sitelerine göre gruplandırır. Yeni Origin-Agent-Cluster
başlığı, tarayıcının belirli bir sayfa için bu varsayılan davranışı değiştirmesini ister. Böylece sayfa, yalnızca tam olarak aynı kaynağa sahip diğer sayfalarla gruplandırılacak şekilde kaynak içeren bir aracı kümesine yerleştirilir. Özellikle aynı sitenin çapraz kaynak sayfaları, aracı kümesinden hariç tutulur.
Bu etkinleştirme ayırımı, tarayıcıların bu yeni kaynak içeren veya kaynaklarla ilişkili aracı kümelerine diğer kaynaklarla birleştirilmeyen kendi özel kaynaklarını vermelerine olanak tanır. Örneğin, bu tür sayfalar kendi işlemlerini alabilir veya ayrı iş parçacıklarında planlanabilir. Sayfanıza Origin-Agent-Cluster
üstbilgisini ekleyerek sayfanın bu tür özel kaynaklardan yararlanacağını tarayıcıya bildirirsiniz.
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 anahtarına sahip sayfaların yapamayacağı işlemler
Sayfanız kaynak içeren veya kaynaklarla ilişkili bir aracı kümesinde yer aldığında, daha önce kullanılabilen aynı site arası kaynak sayfalarıyla iletişim kurma yetkinizi kaybedersiniz. Özellikle:
Artık
document.domain
ayarını yapamazsı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()
aracılığıyla aynı sitedeki diğer kaynakta çapraz sayfalaraWebAssembly.Module
nesneleri gönderemezsiniz.(Yalnızca Chrome) Artık aynı sitedeki diğer kaynakta çapraz sayfalara
SharedArrayBuffer
veyaWebAssembly.Memory
öğeleri 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ıyla en iyi performansı gösterir. Performans açısından yoğun oyunlar, video konferans siteleri veya multimedya oluşturma uygulamaları buna örnek gösterilebilir.
Farklı kaynaktan ancak aynı siteden gelen, yoğun kaynak kullanan iFrame'ler içerir. Örneğin,
https://mail.example.com
https://chat.example.com
iframe'ler yerleştirirse kaynak anahtarlamahttps://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.Farklı kaynaklı, aynı sitedeki sayfalara yerleştirilmesini bekleyin ancak kaynak yoğun olduklarını unutmayın. Örneğin,
https://customerservicewidget.example.com
video sohbet için çok fazla kaynak kullanacaksa vehttps://*.example.com
boyunca çeşitli kaynaklara yerleştirilecekse bu widget'ı yöneten ekip, yerleştirenler üzerindeki performans etkisini azaltmak içinOrigin-Agent-Cluster
başlığını kullanabilir.
Ayrıca, yukarıda bahsedilen nadiren kullanılan kaynak arası iletişim özelliklerini devre dışı bırakmanızda bir sakınca olmadığından ve sitenizin HTTPS kullandığından emin olmanız gerekir.
Ancak bunlar sonuçta yalnızca kurallardır. Kaynak içeren veya kaynaklarla ilişkili aracı kümelerinin sitenize yardımcı olup olmayacağı, en iyi şekilde ölçümler aracılığıyla belirlenir. Özellikle, kaynak anahtarlama işleminin ne gibi bir etkisi olduğunu görmek için Web Vitals'ınızı ve muhtemelen bellek kullanımınızı ölçmeniz gerekir. (Özellikle bellek kullanımı, oyundaki işlem sayısının artırılması işlem başına daha fazla bellek yükü oluşturabileceğinden potansiyel bir sorundur.) Kaynak anahtarlama özelliğini kullanıma sunup en iyisinin gerçekleşmesini ummanız yetmez.
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 içeren veya kaynaklarla ilişkili anahtarlanması, Cross-Origin-Opener-Policy
ve Cross-Origin-Embedder-Policy
başlıkları aracılığıyla kaynaklar arası yalıtım ile ilgilidir ancak ondan 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
üst bilgisini kullanma
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 üstbilginin yalnızca bazı sayfalardan değil, kaynağınızdan gelen tüm yanıtlarda gönderilmesi önemlidir. Aksi takdirde, tarayıcının bir kaynak anahtarlama isteği gördüğünü "hatırladığı" ve bu nedenle bunu istemeyen sayfalarda bile kaynak anahtarlama yaptığı tutarsız sonuçlar alabilirsiniz. Veya tam tersi: Kullanıcının ziyaret ettiği ilk sayfada başlık yoksa tarayıcı, kaynağınızın kaynak anahtarıyla ilişkilendirilmek istemediğini hatırlar ve sonraki sayfalardaki başlığı yoksayar.
Bu "hafıza"nın nedeni, bir kaynak için 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 durum hem web geliştiricileri hem de tarayıcının iç işleyişine göre çok garip olur. Bu nedenle, Origin-Agent-Cluster
için spesifikasyon, belirli bir kaynakta daha önce görülenle tutarlı değilse başlığı yoksayar. Chrome'da bu durum konsol uyarısıyla sonuçlanır.
Bu tutarlılık, window.opener
, frames[0]
veya window.parent
gibi mekanizmalar aracılığıyla birbirine erişebilen sekme, pencere veya iFrame grubu olan bir tarama bağlamı grubuyla sınırlıdır. Bu, bir kaynağın kaynak veya site anahtarlaması belirlendikten sonra (tarayıcının başlığı görmesi veya görmemesi nedeniyle), bu anahtarlamayı değiştirmek için eski sekmeye bağlı olmayan tamamen yeni bir sekme açılması gerektiği anlamına gelir.
Bu ayrıntılar, Origin-Agent-Cluster
üstbilgisini 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
üstbilgisinin uygulanıp uygulanmadığını kontrol etmek için JavaScript window.originAgentCluster
mülkünü kullanın. Bu değer, başlığın (veya kaynaklar arası izolasyon gibi diğer mekanizmaların) kaynak anahtarına neden olduğu durumlarda true
, neden olmadığı durumlarda false
ve Origin-Agent-Cluster
başlığını uygulamayan tarayıcılarda undefined
olur.
Bu verileri analiz platformunuza kaydetmek, sunucunuzu doğru şekilde yapılandırdığınıza dair değerli bir kontrol sağlayabilir.
Son olarak, Origin-Agent-Cluster
başlığının yalnızca güvenli bağlamlarda (ör. HTTPS sayfalarında veya http://localhost
'da) çalışacağını unutmayın. Localhost dışındaki HTTP sayfaları, kaynak anahtarına sahip 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ı sitedeki merkezler arası sayfalardan gelen senkronize erişimden izole etse de Cross-Origin-Resource-Policy
ve Cross-Origin-Opener-Policy
gibi güvenlikle ilgili üstbilgilerin korumasını sağlamaz.
Özellikle Spectre gibi yan kanal saldırılarına karşı güvenilir bir koruma sağlamaz.
Kaynak anahtarlama bazen kaynağınızın kendi sürecini almasına neden olabileceği ve ayrı süreçler, yan kanal saldırılarına karşı önemli bir savunma olduğu için bu biraz şaşırtıcı olabilir. Ancak Origin-Agent-Cluster
başlığının bu anlamda yalnızca bir ipucu olduğunu unutmayın. Tarayıcı, kaynağınıza ayrı bir işlem verme yükümlülüğü altında değildir ve çeşitli nedenlerle bunu yapmayabilir:
Tarayıcı, bunu yapacak teknolojiyi uygulamayabilir. Örneğin, Safari ve Firefox şu anda kendi işlemlerine ayrı sekmeler ekleyebilir ancak iframe'ler için henüz bunu yapamaz.
Tarayıcı, ayrı bir işleme gerek olmadığına 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
üst bilgisinin belirttiği isteğe uymak isteyebilir ancak bunu işlemlerden farklı bir yalıtım teknolojisi kullanarak yapabilir. Örneğin, Chrome bu tür performans izolasyonu için işlemler yerine iş parçacıkları kullanmayı keşfediyor.Kullanıcı veya farklı bir sitede çalışan kod, kaynakta site anahtarına sahip bir sayfaya gitmiş olabilir. Bu durum, tutarlılık garantisinin devreye girmesine ve
Origin-Agent-Cluster
başlığının tamamen yoksayılmasına neden olur.
Bu nedenle, kaynak içeren veya kaynaklarla ilişkili aracı kümelerini güvenlik özelliği olarak düşünmemek önemlidir. Bunun yerine, kaynağınızın özel kaynaklardan yararlanacağını (ve bunun karşılığında belirli özelliklerden vazgeçmeye hazır olduğunuzu) ima ederek tarayıcıya kaynak tahsisine öncelik vermesine 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 hesabına tweet göndererek Chrome DevRel'e düşüncelerinizi ve deneyimlerinizi bildirin.
Spesifikasyon veya özelliğin işleyişiyle ilgili ayrıntılar hakkında başka sorularınız varsa HTML Standard GitHub deposunda sorun kaydı oluşturabilirsiniz. Chrome'un uygulamasıyla ilgili herhangi bir sorunla karşılaşırsanız new.crbug.com adresinde Bileşenler alanı Internals>Sandbox>SiteIsolation
olarak ayarlanmış şekilde hata kaydı oluşturabilirsiniz.
Daha fazla bilgi
Kaynakla anahtarlanmış temsilci kümeleri hakkında daha fazla bilgi edinmek için aşağıdaki bağlantıları inceleyebilirsiniz:
- Demo ve demo kaynağı
- Açıklayıcı
- Özellik
- Hataları izleme: Chrome, Firefox, Safari