درخواست جداسازی عملکرد با سرصفحه Origin-Agent-Cluster

هدر پاسخ HTTP جدید برای محدود کردن اسکریپت نویسی در دامنه و درخواست منابع اختصاصی از مرورگر.

دومنیک دنیکولا
Domenic Denicola

Origin-Agent-Cluster یک هدر پاسخ HTTP جدید است که به مرورگر دستور می دهد تا از دسترسی اسکریپت نویسی همزمان بین صفحات متقاطع سایت مشابه جلوگیری کند. مرورگرها همچنین ممکن است از Origin-Agent-Cluster به عنوان اشاره ای استفاده کنند که مبدأ شما باید منابع جداگانه خود را داشته باشد، مانند یک فرآیند اختصاصی.

در حال حاضر سرصفحه Origin-Agent-Cluster فقط در Chrome 88 به بعد اجرا می شود. این با همکاری نزدیک با نمایندگان موزیلا فایرفاکس که آن را به عنوان ارزش نمونه سازی مشخص کرده اند، طراحی شده است، و با استقبال مثبت اولیه نمایندگان WebKit، موتور مرورگر مورد استفاده سافاری مواجه شد.

اما در این بین، امروز هیچ مشکلی با استقرار سربرگ Origin-Agent-Cluster برای همه کاربران شما وجود ندارد. مرورگرهایی که آن را درک نمی کنند فقط آن را نادیده می گیرند. و از آنجایی که صفحات در خوشه‌های عامل با کلید اصلی در واقع می‌توانند کارهای کمتری نسبت به صفحات کلیددار سایت انجام دهند (پیش‌فرض)، هیچ مشکلی در مورد قابلیت همکاری وجود ندارد که نگران آن باشید.

چرا مرورگرها نمی توانند به طور خودکار مبدا همان سایت را جدا کنند؟

وب بر اساس خط مشی مبدا یکسان ساخته شده است، که یک ویژگی امنیتی است که نحوه تعامل اسناد و اسکریپت ها با منابع منبع دیگر را محدود می کند. برای مثال، صفحه‌ای که در https://a.example میزبانی می‌شود، منشأ متفاوتی با صفحه‌ای در https://b.example یا در https://sub.a.example دارد.

در پشت صحنه، مرورگرها از جدایی که مبدا به روش های مختلف ارائه می دهد استفاده می کنند. در روزهای قدیم، حتی اگر مبداهای جداگانه قادر به دسترسی به داده های یکدیگر نبودند، آنها همچنان منابعی مانند رشته های سیستم عامل، فرآیندها و تخصیص حافظه را به اشتراک می گذاشتند. این بدان معنی است که اگر یک زبانه کند بود، سرعت تمام تب های دیگر را کاهش می داد. یا اگر یک تب از حافظه زیادی استفاده کند، کل مرورگر را خراب می کند.

این روزها مرورگرها پیچیده تر هستند و سعی می کنند مبداهای مختلف را در فرآیندهای مختلف جدا کنند. نحوه عملکرد دقیقاً در هر مرورگر متفاوت است: اکثر مرورگرها دارای سطحی از جدایی بین برگه ها هستند، اما iframe های مختلف در یک برگه ممکن است یک فرآیند را به اشتراک بگذارند. و از آنجایی که فرآیندها با مقداری سربار حافظه همراه هستند، از اکتشافی برای جلوگیری از ایجاد تعداد زیاد استفاده می‌کنند: برای مثال، فایرفاکس دارای محدودیت فرآیند قابل تنظیم توسط کاربر است و کروم رفتار خود را بین دسک‌تاپ (جایی که حافظه زیادتر است) و تلفن همراه (جایی که وجود دارد) تغییر می‌دهد. کمیاب).

این اکتشافات کامل نیستند. و آنها از یک محدودیت مهم رنج می برند: از آنجا که استثناهایی برای سیاست یکسان وجود دارد که به زیر دامنه هایی مانند https://sub.a.example و https://a.example اجازه می دهد با یکدیگر صحبت کنند، مرورگرها نمی توانند به طور خودکار زیر دامنه ها را جدا کنند. از یکدیگر

این رفتار پیش‌فرض «خوشه‌های عامل کلیددار سایت» نامیده می‌شود: یعنی مرورگر صفحات را بر اساس سایت خود گروه‌بندی می‌کند. سربرگ جدید Origin-Agent-Cluster از مرورگر می خواهد که این رفتار پیش فرض را برای یک صفحه معین تغییر دهد و آن را در یک خوشه عامل با کلید مبدا قرار دهد، به طوری که تنها با صفحات دیگری که منشأ دقیقاً یکسانی دارند گروه بندی شود. به طور خاص، صفحات با منبع متقابل همان سایت از خوشه عامل حذف خواهند شد.

این جداسازی انتخابی به مرورگرها اجازه می‌دهد تا به این خوشه‌های عامل کلیددار جدید منابع اختصاصی خود را بدهند، که با منابع دیگر ترکیب نشده‌اند. به عنوان مثال، چنین صفحاتی می توانند فرآیند خود را داشته باشند یا در موضوعات جداگانه برنامه ریزی شوند. با افزودن سرصفحه Origin-Agent-Cluster به صفحه خود، به مرورگر نشان می دهید که صفحه از چنین منابع اختصاصی بهره می برد.

با این حال، برای انجام جداسازی و دریافت این مزایا، مرورگر باید برخی از ویژگی‌های قدیمی را غیرفعال کند.

کاری که صفحات کلید اصلی نمی توانند انجام دهند

هنگامی که صفحه شما در یک خوشه عامل با کلید اصلی قرار دارد، از برخی توانایی‌ها صرف نظر می‌کنید تا با صفحاتی با منبع متقاطع همان سایت صحبت کنید که قبلاً در دسترس بودند. به طور خاص:

  • دیگر نمی توانید document.domain را تنظیم کنید. این یک ویژگی قدیمی است که به طور معمول به صفحات متقاطع سایتی اجازه می دهد تا به طور همزمان به DOM یکدیگر دسترسی داشته باشند، اما در خوشه های عامل با کلید اصلی، غیرفعال است.

  • دیگر نمی‌توانید اشیاء WebAssembly.Module را از طریق postMessage() به صفحات متقاطع همان سایت ارسال کنید.

  • (فقط Chrome) دیگر نمی توانید اشیاء SharedArrayBuffer یا WebAssembly.Memory را به سایر صفحات با منبع متقابل همان سایت ارسال کنید.

چه زمانی باید از خوشه های عامل با کلید مبدا استفاده کرد

ریشه هایی که بیشتر از سرآیند Origin-Agent-Cluster سود می برند مواردی هستند که:

  • در صورت امکان با منابع اختصاصی خود بهترین عملکرد را داشته باشند. به عنوان مثال می‌توان به بازی‌های پرفورمنس، سایت‌های کنفرانس ویدیویی، یا برنامه‌های ایجاد چندرسانه‌ای اشاره کرد.

  • حاوی iframe های پرمصرف است که با منشأ متفاوت، اما یک سایت هستند. به عنوان مثال، اگر https://mail.example.com https://chat.example.com iframes را تعبیه کند، https://mail.example.com/ با کلید اصلی این اطمینان را می دهد که کد نوشته شده توسط تیم چت به طور تصادفی نمی تواند تداخل داشته باشد. با کد نوشته شده توسط تیم ایمیل، و می تواند به مرورگر اشاره کند تا فرآیندهای جداگانه ای را به آنها بدهد تا آنها را به طور مستقل زمان بندی کند و تأثیر عملکرد آنها را بر یکدیگر کاهش دهد.

  • انتظار داشته باشید که در صفحاتی با مبدا متفاوت و همان سایت تعبیه شده باشند، اما می دانند که منابع فشرده هستند. برای مثال، اگر https://customerservicewidget.example.com انتظار داشته باشد که از منابع زیادی برای چت ویدیویی استفاده کند، و در منابع مختلف در سراسر https://*.example.com تعبیه شود، تیمی که آن ویجت را حفظ می کند می تواند از Origin-Agent-Cluster استفاده کند. هدر Origin-Agent-Cluster برای کاهش تاثیر عملکرد آنها بر روی embedder ها.

علاوه بر این، همچنین باید مطمئن شوید که با غیرفعال کردن ویژگی‌های ارتباطی متقاطع که به ندرت مورد استفاده قرار می‌گیرند، مشکلی ندارید و سایت شما از HTTPS استفاده می‌کند.

اما در نهایت، اینها فقط دستورالعمل هستند. اینکه آیا خوشه‌های عامل با کلید مبدا به سایت شما کمک می‌کنند یا خیر، در نهایت از طریق اندازه‌گیری‌ها تعیین می‌شود. به طور خاص، می‌خواهید Web Vitals خود و احتمالاً میزان استفاده از حافظه خود را اندازه‌گیری کنید تا ببینید کلید اصلی چه تأثیری دارد. (به‌ویژه استفاده از حافظه یک نگرانی بالقوه است، زیرا افزایش تعداد پردازش‌ها در بازی می‌تواند باعث افزایش سربار حافظه در هر فرآیند شود.) شما نباید فقط کلید اصلی را اجرا کنید و به بهترین‌ها امیدوار باشید.

این چگونه به جداسازی مبدا متقاطع مرتبط است؟

مبدا-کلیدگذاری خوشه‌های عامل از طریق سرصفحه Origin-Agent-Cluster به جداسازی مبدا متقاطع از طریق سربرگ‌های Cross-Origin-Opener-Policy و Cross-Origin-Embedder-Policy مرتبط است، اما جدا از آن است.

هر سایتی که خود را از مبدا متقاطع جدا می‌کند، همان ویژگی‌های ارتباطی با مبدا متقابل همان سایت را که هنگام استفاده از سرصفحه Origin-Agent-Cluster غیرفعال می‌کند. با این حال، سرصفحه Origin-Agent-Cluster همچنان می‌تواند در بالای جداسازی مبدأ متقاطع، به عنوان یک اشاره اضافی به مرورگر برای اصلاح اکتشافی تخصیص منابع مفید باشد. بنابراین، همچنان باید از سربرگ Origin-Agent-Cluster استفاده کنید و نتایج را اندازه‌گیری کنید، حتی در صفحاتی که قبلاً از هم جدا شده‌اند.

نحوه استفاده از هدر Origin-Agent-Cluster

برای استفاده از سرصفحه Origin-Agent-Cluster ، وب سرور خود را برای ارسال سرصفحه پاسخ HTTP زیر پیکربندی کنید:

Origin-Agent-Cluster: ?1

مقدار ?1 نحو سرصفحه ساخت یافته برای مقدار true بولی است.

مهم است که این سرصفحه را برای همه پاسخ ها از مبدا خود ارسال کنید، نه فقط در برخی از صفحات. در غیر این صورت، می‌توانید نتایج متناقضی دریافت کنید، که در آن مرورگر «به یاد می‌آورد» یک درخواست اصلی کلیدی را ببیند و بنابراین حتی در صفحاتی که درخواستی برای آن نمی‌کنند، کلیدهای مبدا را دریافت می‌کند. یا برعکس: اگر اولین صفحه ای که کاربر بازدید می کند هدر نداشته باشد، مرورگر به یاد می آورد که مبدا شما نمی خواهد با کلید اصلی باشد و در صفحات بعدی هدر را نادیده می گیرد.

دلیل این "حافظه" اطمینان از ثبات کلید زدن برای یک مبدا است. اگر برخی از صفحات در یک مبدأ دارای کلید اصلی بودند، در حالی که برخی دیگر فاقد آن بودند، می‌توانید دو صفحه با منشاء مشابه داشته باشید که در دسته‌های عامل مختلف قرار می‌گرفتند و بنابراین اجازه صحبت با یکدیگر را نداشتند. این امر هم برای توسعه دهندگان وب و هم برای قسمت های داخلی مرورگر بسیار عجیب است. بنابراین، مشخصات Origin-Agent-Cluster در عوض هدر را نادیده می‌گیرد که با آنچه قبلاً برای یک مبدأ مشخص دیده می‌شد ناسازگار باشد. در کروم، این به یک هشدار کنسول منجر می شود.

این سازگاری به یک گروه زمینه مرورگر اختصاص دارد، که گروهی از برگه‌ها، پنجره‌ها یا iframe‌ها هستند که همگی می‌توانند از طریق مکانیسم‌هایی مانند window.opener ، frames[0] یا window.parent به یکدیگر دسترسی پیدا کنند. این به این معنی است که پس از تنظیم مبدا یا کلیدگذاری سایت (توسط مرورگر که هدر را می بیند یا نمی بیند)، تغییر آن مستلزم باز کردن یک برگه کاملاً جدید است که به هیچ وجه به برگه قبلی متصل نیست. .

این جزئیات می تواند برای آزمایش سرصفحه Origin-Agent-Cluster مهم باشد. هنگامی که برای اولین بار آن را به سایت خود اضافه می کنید، فقط بارگذاری مجدد صفحه کار نخواهد کرد. باید برگه را ببندید و یک برگه جدید باز کنید.

برای بررسی اینکه آیا هدر Origin-Agent-Cluster اعمال شده است یا خیر، از ویژگی JavaScript window.originAgentCluster استفاده کنید. این در مواردی true خواهد بود که هدر (یا مکانیسم‌های دیگر، مانند جداسازی مبدا متقاطع ) باعث کلید‌گذاری مبدا شود. false در حالی که این کار را نکرد. و در مرورگرهایی که سرصفحه Origin-Agent-Cluster اجرا نمی کنند، undefined . ثبت این داده ها در پلتفرم تجزیه و تحلیل شما می تواند بررسی ارزشمندی باشد که سرور خود را به درستی پیکربندی کرده اید.

در نهایت، توجه داشته باشید که سرصفحه Origin-Agent-Cluster فقط در زمینه‌های امن ، یعنی در صفحات HTTPS یا http://localhost کار می‌کند. صفحات HTTP غیر محلی میزبان از خوشه های عامل با کلید اصلی پشتیبانی نمی کنند.

Origin-keying یک ویژگی امنیتی نیست

در حالی که استفاده از یک خوشه عامل با کلید مبدا، منشاء شما را از دسترسی همزمان از صفحات متقاطع سایتی جدا می کند، اما از هدرهای مرتبط با امنیت مانند Cross-Origin-Resource-Policy و Cross-Origin-Opener-Policy محافظت نمی کند. Cross-Origin-Opener-Policy . به ویژه، محافظت قابل اعتمادی در برابر حملات کانال جانبی مانند Spectre نیست.

این ممکن است کمی تعجب آور باشد، زیرا کلید اصلی گاهی اوقات می تواند باعث شود که مبدا شما فرآیند خاص خود را پیدا کند و فرآیندهای جداگانه یک دفاع مهم در برابر حملات کانال جانبی هستند. اما به یاد داشته باشید که سربرگ Origin-Agent-Cluster تنها یک اشاره در این زمینه است. مرورگر هیچ تعهدی برای دادن فرآیند جداگانه به مبدا شما ندارد و ممکن است به دلایل مختلف این کار را انجام ندهد:

  • ممکن است یک مرورگر فناوری انجام این کار را اجرا نکند. به عنوان مثال، در حال حاضر سافاری و فایرفاکس می توانند تب های جداگانه ای را در فرآیندهای خود قرار دهند، اما هنوز نمی توانند این کار را برای iframe انجام دهند.

  • مرورگر ممکن است به این نتیجه برسد که ارزش یک فرآیند جداگانه را ندارد. برای مثال، در دستگاه‌های اندرویدی با حافظه کم، یا در Android WebView، Chrome تا حد امکان از پردازش‌های کمتری استفاده می‌کند.

  • ممکن است مرورگر بخواهد به درخواستی که سرصفحه Origin-Agent-Cluster نشان می دهد احترام بگذارد، اما می تواند این کار را با استفاده از فناوری جداسازی متفاوت از فرآیندها انجام دهد. برای مثال، Chrome در حال کاوش با استفاده از رشته‌ها به جای فرآیندهای این نوع جداسازی عملکرد است.

  • کاربر یا کدی که در سایت دیگری اجرا می‌شود، ممکن است قبلاً به صفحه‌ای با کلید سایت در مبدا شما پیمایش کرده باشد، که باعث می‌شود ضمانت سازگاری شروع شود و سرصفحه Origin-Agent-Cluster به طور کامل نادیده گرفته شود.

به این دلایل، مهم است که خوشه‌های عامل با کلید اصلی را به عنوان یک ویژگی امنیتی در نظر نگیریم. در عوض، این روشی است برای کمک به مرورگر در اولویت‌بندی تخصیص منابع، با اشاره به این که مبدأ شما از منابع اختصاصی بهره می‌برد (و مایلید در ازای آن ویژگی‌های خاصی را کنار بگذارید).

بازخورد

اگر از سرصفحه Origin-Agent-Cluster استفاده می‌کنید یا قصد استفاده از آن را دارید، تیم Chrome دوست دارد از شما مطلع شود. علاقه عمومی و پشتیبانی شما به ما کمک می کند ویژگی ها را اولویت بندی کنیم و به سایر فروشندگان مرورگر نشان دهیم که چقدر اهمیت دارند. در ChromiumDev@ توییت کنید و Chrome DevRel را از افکار و تجربیات خود مطلع کنید.

اگر سؤالات بیشتری در مورد مشخصات یا جزئیات نحوه عملکرد این ویژگی دارید، می‌توانید مشکلی را در مخزن استاندارد HTML GitHub ثبت کنید. و اگر در پیاده‌سازی Chrome با مشکلی مواجه شدید، می‌توانید یک اشکال را در new.crbug.com با فیلد Components که روی Internals>Sandbox>SiteIsolation تنظیم شده است، ثبت کنید.

بیشتر بدانید

برای کسب اطلاعات بیشتر در مورد خوشه‌های عامل اصلی، می‌توانید جزئیات را در این پیوندها بررسی کنید: