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ığı.
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ınaWebAssembly.Module
nesneleri gönderemezsiniz.(Yalnızca Chrome) Artık aynı sitelerin ç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:
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 anahtarlamahttps://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 vehttps://*.example.com
boyunca çeşitli kaynaklarda yerleşik olacaksa bu widget'ı yöneten ekip, yerleştirenler üzerindeki performans etkisini azaltmak içinOrigin-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.
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:
- Demo ve demo kaynağı
- Açıklayıcı
- Spesifikasyon
- İzleme hataları: Chrome, Firefox, Safari