Tiêu đề phản hồi HTTP mới để giới hạn việc viết tập lệnh trên toàn miền và yêu cầu tài nguyên chuyên dụng từ trình duyệt.
Origin-Agent-Cluster
là tiêu đề phản hồi HTTP mới hướng dẫn trình duyệt ngăn chặn
quyền truy cập tập lệnh đồng bộ giữa các trang có cùng nguồn gốc và có cùng trang web. Các trình duyệt cũng có thể sử dụng
Origin-Agent-Cluster
để gợi ý rằng nguồn gốc của bạn nên nhận được các tài nguyên riêng biệt, chẳng hạn như
riêng biệt.
Khả năng tương thích với trình duyệt
Hiện tại, tiêu đề Origin-Agent-Cluster
chỉ được triển khai trong Chrome 88 trở đi. Được thiết kế
cộng tác chặt chẽ với các đại diện của Mozilla Firefox, những người đã đánh dấu chương trình này là giá trị
tạo nguyên mẫu và có một
dương tính sơ bộ
tiếp nhận từ
đại diện của WebKit, công cụ trình duyệt được Safari sử dụng.
Nhưng trong thời gian chờ đợi, bạn sẽ không gặp vấn đề gì khi triển khai tiêu đề Origin-Agent-Cluster
cho tất cả
số người dùng ngay hôm nay. Các trình duyệt không hiểu API sẽ bỏ qua thông báo đó. Và vì các trang trong
các cụm tác nhân theo khoá nguồn gốc thực sự có thể thực hiện ít hoạt động hơn so với các cụm tác nhân theo khoá trang web (cụm từ
mặc định), thì bạn không cần lo lắng về khả năng tương tác.
Lý do các trình duyệt không thể tự động tách biệt các nguồn gốc cùng trang web
Web được xây dựng dựa trên chính sách cùng nguồn gốc, đây là một tính năng bảo mật được
hạn chế cách tài liệu và tập lệnh có thể tương tác với tài nguyên từ
origin. Ví dụ: một trang được lưu trữ tại https://a.example
nằm tại
điểm khởi hành khác với một tại https://b.example
hoặc tại https://sub.a.example
.
Trong thực tế, các trình duyệt sử dụng sự phân tách mà các nguồn gốc cung cấp theo nhiều cách. Phiên bản cũ ngày, mặc dù các nguồn gốc riêng biệt không thể truy cập vào dữ liệu của nhau, chúng vẫn chia sẻ các tài nguyên như luồng hệ điều hành, các quy trình và cơ cấu phân bổ bộ nhớ. Điều này có nghĩa là nếu một tab bị chậm, tất cả các thẻ khác sẽ chạy chậm. Hoặc nếu một thẻ đã sử dụng quá nhiều bộ nhớ, thẻ đó sẽ gây ra sự cố cho toàn bộ trình duyệt.
Ngày nay, các trình duyệt tinh vi hơn và cố gắng tách riêng các nguồn gốc khác nhau thành các quy trình. Cách chính xác hoạt động của tính năng này sẽ khác nhau theo từng trình duyệt: hầu hết các trình duyệt đều có một số cấp độ phân tách giữa các tab, nhưng các iframe khác nhau bên trong một tab có thể dùng chung một quá trình. Vì các quy trình đi kèm với một số hao tổn bộ nhớ, chúng sử dụng phương pháp phỏng đoán để tránh tạo ra quá nhiều dữ liệu: ví dụ: Firefox có giới hạn quá trình mà người dùng có thể định cấu hình, và Chrome thay đổi hành vi giữa máy tính (nơi có bộ nhớ phong phú hơn) và thiết bị di động (nơi mà bộ nhớ khan hiếm).
Những suy nghiệm này không hoàn hảo. Và họ phải đối mặt với hạn chế quan trọng: vì có
các trường hợp ngoại lệ đối với chính sách cùng nguồn gốc, cho phép các miền con như https://sub.a.example
và
https://a.example
để giao tiếp với nhau, nên các trình duyệt không thể tự động tách biệt miền con với
với nhau.
Hành vi mặc định này được gọi là "cụm tác nhân theo khoá trang web": tức là trình duyệt nhóm các trang dựa trên
trên trang web của họ. Tiêu đề Origin-Agent-Cluster
mới yêu cầu trình duyệt thay đổi chế độ mặc định này
hành vi của một trang nhất định, đặt trang đó vào một cụm tác nhân được khoá theo khoá origin
chỉ với các trang khác có cùng nguồn gốc. Cụ thể, các trang có cùng nguồn gốc và có cùng trang web
sẽ bị loại trừ khỏi cụm tác nhân.
Việc phân tách chọn sử dụng này cho phép trình duyệt cung cấp cho các cụm tác nhân mới theo khoá nguồn gốc của riêng chúng
riêng biệt, không kết hợp với các tài nguyên của các nguồn khác. Ví dụ: các trang như vậy
có thể có quy trình riêng hoặc được lên lịch trên các luồng riêng. Bằng cách thêm tham số
Origin-Agent-Cluster
vào tiêu đề trang của bạn, tức là bạn đang cho trình duyệt biết rằng trang sẽ
hưởng lợi từ các tài nguyên dành riêng đó.
Tuy nhiên, để phân tách và nhận được các lợi ích này, trình duyệt cần tắt một số tính năng cũ.
Những việc mà trang theo khoá nguồn gốc không làm được
Khi trang của bạn nằm trong cụm tác nhân theo khoá nguồn gốc, bạn sẽ không thể trò chuyện với cùng một trang web các trang trên nhiều nguồn gốc đã có trước đây. Cụ thể:
Bạn không thể đặt nữa
document.domain
. Đây là một tính năng cũ thường cho phép các trang có cùng nguồn gốc trên cùng một trang web truy cập đồng bộ vào từng DOM của người khác, nhưng trong các cụm tác nhân theo khoá nguồn gốc, tính năng này bị tắt.Bạn không thể gửi nữa
WebAssembly.Module
sang các trang khác có cùng nguồn gốc và có cùng trang web thông quapostMessage()
.(Chỉ dành cho Chrome) Bạn không thể gửi nữa
SharedArrayBuffer
hoặcWebAssembly.Memory
sang các trang khác có cùng nguồn gốc và có cùng trang web.
Trường hợp nên sử dụng cụm tác nhân theo khoá nguồn gốc
Những nguồn gốc được hưởng lợi nhiều nhất từ tiêu đề Origin-Agent-Cluster
là những nguồn:
Hoạt động hiệu quả nhất bằng tài nguyên chuyên dụng riêng khi có thể. Ví dụ: các trò chơi tập trung vào hiệu suất, trang web hội nghị truyền hình hoặc ứng dụng sáng tạo nội dung đa phương tiện.
Chứa các iframe tốn nhiều tài nguyên là các iframe khác nhau, nhưng cùng một trang web. Ví dụ: nếu
https://mail.example.com
nhúnghttps://chat.example.com
iframe, theo khoá nguồn gốchttps://mail.example.com/
đảm bảo mã do nhóm trò chuyện viết không thể vô tình can thiệp vào mã do nhóm thư viết và có thể gợi ý cho trình duyệt để tách biệt để lập lịch biểu một cách độc lập và giảm tác động ảnh hưởng đến hiệu suất lẫn nhau.Mong muốn được nhúng trên các trang có cùng nguồn gốc, cùng trang web, nhưng tự biết rằng mình tốn nhiều tài nguyên. Ví dụ: nếu
https://customerservicewidget.example.com
muốn sử dụng rất nhiều tài nguyên dành cho trò chuyện video và sẽ được nhúng vào nhiều nguồn gốc xuyên suốthttps://*.example.com
, nhóm duy trì tiện ích đó có thể dùngOrigin-Agent-Cluster
để tìm cách giảm tác động đến hiệu suất đối với người nhúng.
Ngoài ra, bạn cũng cần đảm bảo bạn ổn khi vô hiệu hoá các tính năng hiếm khi sử dụng được thảo luận ở trên các tính năng giao tiếp trên nhiều nguồn gốc, đồng thời trang web của bạn đang sử dụng HTTPS.
Nhưng cuối cùng, đây chỉ là các nguyên tắc. Cụm tác nhân theo khoá nguồn gốc có giúp ích cho trang web của bạn hay không cuối cùng mới được xác định chính xác nhất thông qua các phép đo. Cụ thể, bạn nên đo lường Các chỉ số quan trọng về trang web và có thể cả bộ nhớ của bạn để xem tác động của phương thức khoá nguồn gốc. (Mức sử dụng bộ nhớ tính bằng là một mối lo ngại tiềm ẩn, vì việc tăng số lượng quy trình đang thực hiện có thể khiến mức hao tổn bộ nhớ cho mỗi quy trình). Bạn không nên chỉ triển khai theo khoá nguồn gốc và hy vọng điều tốt nhất.
Vấn đề này có liên quan như thế nào đến việc tách biệt nhiều nguồn gốc?
Khoá nguồn gốc của các cụm tác nhân thông qua tiêu đề Origin-Agent-Cluster
có liên quan đến, nhưng tách biệt
cách ly nhiều nguồn gốc thông qua Cross-Origin-Opener-Policy
và
Cross-Origin-Embedder-Policy
tiêu đề.
Mọi trang web tự tách biệt nhiều nguồn gốc cũng sẽ vô hiệu hoá cùng một trang web có nhiều nguồn gốc
các tính năng giao tiếp như khi sử dụng tiêu đề Origin-Agent-Cluster
. Tuy nhiên,
Tiêu đề Origin-Agent-Cluster
vẫn có thể hữu ích bên cạnh việc tách biệt nhiều nguồn gốc, vì đây là một công cụ bổ sung
gợi ý cho trình duyệt để sửa đổi suy đoán phân bổ tài nguyên. Do đó, bạn vẫn nên cân nhắc
áp dụng tiêu đề Origin-Agent-Cluster
và đo lường kết quả, ngay cả trên các trang
đã tách biệt nhiều nguồn gốc.
Cách sử dụng tiêu đề Origin-Agent-Cluster
Để sử dụng tiêu đề Origin-Agent-Cluster
, hãy định cấu hình máy chủ web của bạn để gửi HTTP sau đây
tiêu đề phản hồi:
Origin-Agent-Cluster: ?1
Giá trị của ?1
là cấu trúc
cú pháp tiêu đề cho giá trị boolean true
giá trị.
Bạn phải gửi tiêu đề này trên tất cả câu trả lời trên máy chủ gốc của bạn, chứ không chỉ một số trang. Nếu không, bạn có thể nhận được kết quả không nhất quán, trình duyệt "nhớ" thấy khoá gốc yêu cầu và do đó khoá này sẽ được tạo bằng khoá gốc ngay cả trên các trang không yêu cầu. Hoặc ngược lại: nếu trang đầu tiên người dùng truy cập không có tiêu đề, thì trình duyệt sẽ ghi nhớ rằng máy chủ gốc của bạn không muốn theo khoá nguồn gốc và sẽ bỏ qua tiêu đề trên các trang tiếp theo.
Lý do có "kỷ niệm" này là để đảm bảo tính nhất quán của việc nhập khoá cho một nguồn gốc. Nếu một số trang trên
trang gốc đều có khoá nguồn gốc còn các trang khác thì không, nên bạn có thể có hai trang cùng nguồn gốc
được đặt vào các cụm tác nhân khác nhau nên không được phép trò chuyện với nhau. Điều này sẽ là
thật lạ, đối với cả nhà phát triển web lẫn bộ phận nội bộ của trình duyệt. Vì vậy, thông số kỹ thuật
cho Origin-Agent-Cluster
thay vào đó bỏ qua tiêu đề nếu tiêu đề đó không nhất quán với tiêu đề trước đó
mà bạn thấy cho một nguồn gốc nhất định. Trong Chrome, thao tác này sẽ dẫn đến một cảnh báo trên bảng điều khiển.
Sự nhất quán này thuộc phạm vi một nhóm ngữ cảnh duyệt web, tức là một nhóm thẻ, cửa sổ hoặc
Các iframe tất cả đều có thể kết nối với nhau thông qua các cơ chế như window.opener
, frames[0]
hoặc
window.parent
. Điều này có nghĩa là sau khi khoá nguồn gốc hoặc khoá trang web đã được xử lý (bằng
trình duyệt nhìn thấy hoặc không nhìn thấy tiêu đề), thì việc thay đổi tiêu đề đòi hỏi phải mở một giao diện hoàn toàn mới
, không được kết nối với thẻ cũ theo bất kỳ cách nào.
Những thông tin này có thể đóng vai trò quan trọng trong việc kiểm thử tiêu đề Origin-Agent-Cluster
. Khi thêm lần đầu tiên
vào trang web của bạn, chỉ cần tải lại trang sẽ không hoạt động; bạn sẽ cần đóng tab và mở một
một.
Để kiểm tra xem tiêu đề Origin-Agent-Cluster
có được áp dụng hay không, hãy dùng JavaScript
Thuộc tính window.originAgentCluster
. Thuộc tính này sẽ là true
trong trường hợp tiêu đề (hoặc trường hợp khác
các cơ chế (như cách ly nhiều nguồn gốc) gây ra hiện tượng khoá nguồn gốc; false
khi không; và undefined
trong các trình duyệt không triển khai tiêu đề Origin-Agent-Cluster
.
Việc ghi lại dữ liệu này vào nền tảng phân tích có thể cung cấp thông tin kiểm tra hữu ích mà bạn đã thiết lập
máy chủ của bạn một cách chính xác.
Cuối cùng, lưu ý rằng tiêu đề Origin-Agent-Cluster
sẽ chỉ hoạt động trên trang bảo mật
ngữ cảnh, tức là trên HTTPS
hoặc trên http://localhost
. Các trang HTTP không phải máy chủ cục bộ không hỗ trợ tác nhân theo khoá nguồn gốc
cụm.
Khoá gốc không phải là một tính năng bảo mật
Mặc dù việc sử dụng cụm tác nhân theo khoá nguồn gốc sẽ tách biệt nguồn gốc của bạn khỏi quyền truy cập đồng bộ từ
các trang có cùng nguồn gốc, nhưng không cung cấp biện pháp bảo vệ
các tiêu đề liên quan đến bảo mật như
Cross-Origin-Resource-Policy
và
Cross-Origin-Opener-Policy
.
Cụ thể, đây không phải là biện pháp bảo vệ đáng tin cậy giúp chống lại các cuộc tấn công kênh bên như
Spectre.
Điều này có thể khiến bạn hơi ngạc nhiên vì phương thức khoá nguồn đôi khi có thể khiến nguồn gốc của bạn trở thành mã nguồn riêng
và các quy trình riêng biệt là một biện pháp phòng vệ quan trọng chống lại các cuộc tấn công kênh bên. Nhưng hãy nhớ
tiêu đề Origin-Agent-Cluster
chỉ là một gợi ý về vấn đề đó. Trình duyệt ở dưới không
nghĩa vụ cung cấp một quy trình riêng cho nguồn gốc của mình và có thể không làm như vậy vì nhiều lý do:
Trình duyệt có thể không triển khai công nghệ để thực hiện việc đó. Ví dụ: hiện tại, Safari và Firefox có thể đặt các thẻ riêng biệt vào các quy trình của riêng chúng, nhưng không thể đặt các thẻ đó đối với iframe.
Trình duyệt có thể cho rằng việc này không đáng để chi phí cho một tiến trình riêng biệt. Ví dụ: bật thiết bị Android có bộ nhớ thấp hoặc trong WebView của Android, Chrome sử dụng ít quy trình nhất có thể.
Trình duyệt nên tôn trọng yêu cầu mà tiêu đề
Origin-Agent-Cluster
chỉ ra. nhưng có thể thực hiện bằng cách sử dụng công nghệ cách ly khác với quy trình. Ví dụ: Chrome là khám phá bằng cách sử dụng luồng thay vì quy trình để tách biệt hiệu suất này.Người dùng hoặc đoạn mã chạy trên một trang web khác có thể đã chuyển đến một trang được khoá theo trang web trên máy chủ gốc, giúp đảm bảo tính nhất quán có hiệu lực và Tiêu đề
Origin-Agent-Cluster
sẽ bị bỏ qua hoàn toàn.
Vì những lý do này, bạn không nên coi cụm tác nhân theo khoá nguồn gốc là một tính năng bảo mật. Đó là cách giúp trình duyệt ưu tiên phân bổ tài nguyên, bằng cách gợi ý rằng sẽ được hưởng lợi từ các tài nguyên chuyên biệt (và bạn sẵn sàng từ bỏ một số tính năng).
Phản hồi
Nhóm Chrome rất mong được nghe ý kiến của bạn nếu bạn đang sử dụng hoặc cân nhắc sử dụng Origin-Agent-Cluster
. Lợi ích của cộng đồng và sự hỗ trợ của bạn giúp chúng tôi sắp xếp mức độ ưu tiên cho các tính năng cũng như cho thấy
tầm quan trọng của họ đối với nhà cung cấp trình duyệt. Tweet tại @ChromiumDev và
cho Chrome DevRel biết suy nghĩ và trải nghiệm của bạn.
Nếu có thêm thắc mắc về thông số kỹ thuật hoặc chi tiết về cách hoạt động của tính năng này, bạn có thể
báo cáo vấn đề trên kho lưu trữ GitHub chuẩn HTML. Nếu bạn
gặp bất kỳ vấn đề nào trong quá trình triển khai Chrome, bạn có thể báo cáo lỗi tại
new.crbug.com
với trường Thành phần được đặt thành Internals>Sandbox>SiteIsolation
.
Tìm hiểu thêm
Để tìm hiểu thêm về cụm tác nhân theo khoá nguồn gốc, bạn có thể đi sâu vào thông tin chi tiết tại các đường liên kết sau:
- Bản minh hoạ và bản minh hoạ nguồn
- Người giải thích
- Thông số kỹ thuật
- Theo dõi lỗi: Chrome, Firefox, Safari