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ığı.
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ınaWebAssembly.Module
nesneleri gönderemezsiniz.(Yalnızca Chrome) Artık aynı sitenin diğer çapraz kaynak sayfalarına
SharedArrayBuffer
veyaWebAssembly.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 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.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 vehttps://*.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.
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:
- Demo ve demo kaynağı
- Açıklayıcı
- Spesifikasyon
- İzleme hataları: Chrome, Firefox, Safari