Hướng dẫn bật tính năng tách biệt nhiều nguồn gốc

Việc tách biệt nhiều nguồn gốc cho phép một trang web sử dụng các tính năng mạnh mẽ như SharedArrayBuffer. Bài viết này giải thích cách bật tính năng tách biệt nhiều nguồn gốc trên trang web của bạn.

Hướng dẫn này trình bày cách bật tính năng tách biệt nhiều nguồn gốc. Bạn phải tách biệt nhiều nguồn gốc nếu muốn sử dụng SharedArrayBuffer, performance.measureUserAgentSpecificMemory() hoặc bộ tính giờ có độ phân giải cao có độ chính xác cao hơn.

Nếu bạn định bật tính năng tách biệt nhiều nguồn gốc, hãy đánh giá tác động của việc này đối với các tài nguyên nhiều nguồn gốc khác trên trang web của bạn, chẳng hạn như vị trí đặt quảng cáo.

Xác định vị trí trong trang web của bạn SharedArrayBuffer được sử dụng
Kể từ Chrome 92, các chức năng sử dụng SharedArrayBuffer sẽ không còn hoạt động nếu không có tính năng tách biệt nhiều nguồn gốc. Nếu bạn truy cập vào trang này do thông báo về việc ngừng sử dụng SharedArrayBuffer, thì có thể là trang web của bạn hoặc một trong các tài nguyên nhúng trên trang đang sử dụng SharedArrayBuffer. Để đảm bảo không có vấn đề nào trên trang web của bạn do việc ngừng sử dụng, hãy bắt đầu bằng cách xác định vị trí sử dụng trang web.

Nếu bạn không chắc chắn SharedArrayBuffer được sử dụng ở đâu trong trang web của mình, hãy tìm hiểu theo 2 cách:

  • Sử dụng Công cụ của Chrome cho nhà phát triển
  • (Nâng cao) Sử dụng báo cáo về việc ngừng sử dụng

Nếu bạn đã biết vị trí của mình đang sử dụng SharedArrayBuffer, hãy chuyển đến phần Phân tích tác động của việc tách biệt nhiều nguồn gốc.

Sử dụng Công cụ của Chrome cho nhà phát triển

Công cụ của Chrome cho nhà phát triển cho phép nhà phát triển kiểm tra trang web.

  1. Mở Công cụ của Chrome cho nhà phát triển trên trang mà bạn nghi ngờ có thể đang sử dụng SharedArrayBuffer.
  2. Chọn bảng điều khiển Bảng điều khiển.
  3. Nếu trang đang sử dụng SharedArrayBuffer, thông báo sau sẽ hiển thị:
    [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. common-bundle.js:535
    
  4. Tên tệp và số dòng ở cuối thông báo (ví dụ: common-bundle.js:535) cho biết SharedArrayBuffer đến từ đâu. Nếu đó là thư viện của bên thứ ba, hãy liên hệ với nhà phát triển để khắc phục vấn đề. Nếu phương pháp này được triển khai dưới dạng một phần của trang web, hãy làm theo hướng dẫn bên dưới để bật tính năng tách biệt nhiều nguồn gốc.
Cảnh báo trên Bảng điều khiển DevToools khi dùng SharedArrayBuffer mà không tách biệt nhiều nguồn gốc
Cảnh báo trên Bảng điều khiển DevToools khi dùng SharedArrayBuffer mà không tách biệt nhiều nguồn gốc.

(Nâng cao) Sử dụng báo cáo về việc ngừng sử dụng

Một số trình duyệt có chức năng báo cáo là ngừng sử dụng API cho một điểm cuối đã chỉ định.

  1. Thiết lập máy chủ báo cáo về việc ngừng sử dụng và nhận URL báo cáo. Bạn có thể thực hiện việc này bằng cách sử dụng một dịch vụ công hoặc tự xây dựng một dịch vụ công.
  2. Bằng cách sử dụng URL này, hãy đặt tiêu đề HTTP sau đây thành các trang có khả năng phân phát SharedArrayBuffer.
    Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
    
  3. Sau khi tiêu đề bắt đầu được truyền tải, điểm cuối mà bạn đã đăng ký sẽ bắt đầu thu thập các báo cáo về việc ngừng sử dụng.

Hãy xem ví dụ về cách triển khai tại đây: https://cross-origin-isolation.glitch.me.

Phân tích tác động của việc tách biệt nhiều nguồn gốc

Sẽ không tuyệt vời sao nếu bạn có thể đánh giá tác động của việc bật tính năng tách biệt nhiều nguồn gốc đối với trang web của mình mà không thực sự gây ra vấn đề gì? Các tiêu đề HTTP Cross-Origin-Opener-Policy-Report-OnlyCross-Origin-Embedder-Policy-Report-Only cho phép bạn thực hiện việc đó.

  1. Đặt Cross-Origin-Opener-Policy-Report-Only: same-origin trên tài liệu cấp cao nhất của bạn. Đúng như tên gọi, tiêu đề này chỉ gửi báo cáo về tác động mà COOP: same-origin sẽ tạo ra đối với trang web của bạn – thực sự thì tiêu đề này sẽ không tắt tính năng giao tiếp với cửa sổ bật lên.
  2. Thiết lập tính năng báo cáo và định cấu hình máy chủ web để nhận và lưu báo cáo.
  3. Đặt Cross-Origin-Embedder-Policy-Report-Only: require-corp trên tài liệu cấp cao nhất của bạn. Xin nhắc lại, tiêu đề này cho bạn thấy tác động của việc bật COEP: require-corp mà không thực sự ảnh hưởng đến hoạt động của trang web. Bạn có thể định cấu hình tiêu đề này để gửi báo cáo tới chính máy chủ báo cáo mà bạn đã thiết lập ở bước trước.

Giảm thiểu tác động của việc tách biệt nhiều nguồn gốc

Sau khi bạn đã xác định được tài nguyên nào sẽ bị ảnh hưởng khi tách biệt nhiều nguồn gốc, dưới đây là các nguyên tắc chung về cách bạn thực sự chọn sử dụng các tài nguyên nhiều nguồn gốc đó:

  1. Trên các tài nguyên nhiều nguồn gốc như hình ảnh, tập lệnh, biểu định kiểu, iframe và các tài nguyên khác, hãy đặt tiêu đề Cross-Origin-Resource-Policy: cross-origin. Trên các tài nguyên cùng trang web, hãy đặt tiêu đề Cross-Origin-Resource-Policy: same-site.
  2. Đối với những tài nguyên có thể tải bằng CORS, hãy đảm bảo bạn đã bật thuộc tính này bằng cách đặt thuộc tính crossorigin trong thẻ HTML (ví dụ: <img src="example.jpg" crossorigin>). Đối với yêu cầu tìm nạp JavaScript, hãy đảm bảo request.mode được đặt thành cors.
  3. Nếu bạn muốn sử dụng các tính năng mạnh mẽ như SharedArrayBuffer bên trong iframe đã tải, hãy thêm allow="cross-origin-isolated" vào <iframe>.
  4. Nếu tài nguyên nhiều nguồn gốc được tải vào iframe hoặc tập lệnh trình chạy liên quan đến một lớp iframe hoặc tập lệnh trình chạy khác, hãy áp dụng định kỳ các bước được mô tả trong phần này trước khi tiếp tục.
  5. Sau khi bạn xác nhận rằng tất cả các tài nguyên nhiều nguồn gốc đều được chọn sử dụng, hãy đặt tiêu đề Cross-Origin-Embedder-Policy: require-corp trên iframe và tập lệnh trình chạy (bắt buộc bất kể các nguồn gốc cùng nguồn gốc hay nhiều nguồn gốc).
  6. Hãy đảm bảo rằng không có cửa sổ bật lên nào trên nhiều nguồn gốc yêu cầu giao tiếp thông qua postMessage(). Không có cách nào để tiếp tục hoạt động khi tính năng tách biệt nhiều nguồn gốc đang bật. Bạn có thể di chuyển thông tin giao tiếp sang một tài liệu khác không bị tách biệt nhiều nguồn gốc, hoặc sử dụng một phương thức liên lạc khác (ví dụ: các yêu cầu HTTP).

Bật tính năng tách biệt nhiều nguồn gốc

Sau khi bạn đã giảm thiểu tác động bằng cách tách biệt nhiều nguồn gốc, dưới đây là những nguyên tắc chung để bật tính năng tách biệt nhiều nguồn gốc:

  1. Đặt tiêu đề Cross-Origin-Opener-Policy: same-origin trên tài liệu cấp cao nhất của bạn. Nếu bạn đã đặt Cross-Origin-Opener-Policy-Report-Only: same-origin, hãy thay thế. Thao tác này sẽ chặn hoạt động giao tiếp giữa tài liệu cấp cao nhất và cửa sổ bật lên của tài liệu đó.
  2. Đặt tiêu đề Cross-Origin-Embedder-Policy: require-corp trên tài liệu cấp cao nhất của bạn. Nếu bạn đã đặt Cross-Origin-Embedder-Policy-Report-Only: require-corp, hãy thay thế. Thao tác này sẽ chặn việc tải các tài nguyên nhiều nguồn gốc chưa được chọn sử dụng.
  3. Hãy kiểm tra để đảm bảo rằng self.crossOriginIsolated trả về true trong bảng điều khiển để xác minh rằng trang của bạn được tách riêng trên nhiều nguồn gốc.

Tài nguyên