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 kaynaklı sayfaları arasında senkronize komut dosyası erişimini engellemesini bildiren yeni bir HTTP yanıtı üst bilgisidir. Tarayıcılar, kaynağınızın özel bir işlem gibi kendi ayrı kaynaklarına sahip olması gerektiğini belirtmek için Origin-Agent-Cluster
değerini de kullanabilir.
Tarayıcı uyumluluğu
Origin-Agent-Cluster
başlığı şu anda yalnızca Chrome 88 ve sonraki sürümlerde uygulanmaktadır. Bu özellik, prototip oluşturmaya değer olarak işaretleyen Mozilla Firefox temsilcileriyle yakın işbirliği içinde tasarlandı ve Safari'nin kullandığı tarayıcı motoru WebKit'in temsilcilerinden öncelikli olarak olumlu bir yanıt aldı.
Ancak bu süreçte Origin-Agent-Cluster
başlığını tüm kullanıcılarınıza dağıtabilirsiniz. Bunu anlamayan tarayıcılar bu özelliği 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 aynı site kaynaklarını neden 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 kuruludur. Ö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, bir sekme yavaşsa diğer tüm sekmelerin de yavaşlayacağı anlamına geliyordu. Bir sekme çok fazla bellek kullanırsa tüm tarayıcı çöker.
Günümüzde tarayıcılar daha gelişmiş ve farklı kaynaklarını farklı işlemlere ayırmaya çalışıyor. Bu işlemin 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ü oluşturduğundan, ç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 daha 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 birbirleriyle iletişim kurmasına izin veren istisnalar olduğ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 olduğunda, daha önce kullanılabilen aynı sitedeki kaynakta farklı sayfalarla iletişim kurma özelliklerinden bazılarını kaybedersiniz. Özellikle:
Artık
document.domain
ayarını yapamazsınız. Bu, normalde aynı sitedeki çapraz kaynak sayfalarının birbirlerinin DOM'una eşzamanlı olarak erişmesine izin veren eski bir özelliktir ancak kaynak içeren veya kaynaklarla ilişkili aracı kümelerinde devre dışıdı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 yararlanan 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'leri yerleştiriyorsa kaynak anahtarlamahttps://mail.example.com/
, sohbet ekibi tarafından yazılan kodun posta ekibi tarafından yazılan kodla yanlışlıkla etkileşime geçmemesini sağlar ve tarayıcıya, bunları bağımsız olarak planlamak ve birbirlerinin performans üzerindeki etkilerini azaltmak için ayrı işlemler vermesi gerektiğini söyleyebilir.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 anahtarını kullanıma sunup en iyisini ummanız yeterli değildir.
Bu, kökler arası erişimin kapatılmasıyla nasıl ilgili?
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 kaynaktan kaynakya izole eden tüm siteler, Origin-Agent-Cluster
üstbilgisi kullanıldığında olduğu gibi aynı aynı site kaynaktan kaynakya 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, kökler arası erişime kapalı olan sayfalarda bile Origin-Agent-Cluster
üstbilgisini uygulamayı ve sonuçları ölçmeyi düşünmeniz gerekir.
Origin-Agent-Cluster
üst bilgisini kullanma
Origin-Agent-Cluster
üst bilgisini 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ğerinin değeri, bir 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 kaynakla ilişkilendirilmişken diğerleri ilişkilendirilmemişse aynı kaynaktaki iki sayfa farklı temsilci kümelerine yerleştirilmiş olabilir ve bu nedenle sayfaların birbirleriyle iletişim kurmasına izin verilmeyebilir. 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ına neden olur.
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. Sitenize ilk kez eklediğinizde sayfayı yeniden yüklemek yeterli olmaz. 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 anahtarlama 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 eder ancak 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
üst bilgisinin bu konuda 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şlemin masrafına değmeyeceğine karar verebilir. Örneğin, belleği düşük 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 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
Chrome Ekibi, Origin-Agent-Cluster
başlığını kullanıyorsanız veya kullanmayı düşünüyorsanız sizinle iletişime geçmekten memnuniyet duyar. Kamu yararı ve desteğiniz, özelliklere öncelik vermemize ve diğer tarayıcı tedarikçi firmalarına bunların ne kadar önemli olduğunu göstermemize yardımcı olur. @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