Cross-Origin Storage API: Ngừng tải xuống tệp hai lần

Cross-Origin Storage API có thể cho phép các trình duyệt chia sẻ một mô hình AI nặng 33 GB giữa hai trang web, giúp giảm lượng dữ liệu bạn phải tải xuống từ 66 GB xuống còn 33 GB.

Trước đây, các trình duyệt cho phép bất kỳ trang web nào cũng có thể tái sử dụng một tệp mà một trang web khác đã tải về. Nếu bạn tải cùng một gói React từ một CDN trên hai trang khác nhau, trình duyệt sẽ cung cấp bản sao đã lưu trong bộ nhớ đệm (cache) ở lần thứ hai. Tuy nhiên, một loạt các thay đổi tập trung vào quyền riêng tư đã phá vỡ sự tiện lợi này: hiện nay các trình duyệt phân tách bộ nhớ đệm theo từng trang web, vì vậy ngay cả các URL giống hệt nhau cũng được lưu trữ riêng biệt cho từng nguồn (origin). Kết quả là lưu lượng truy cập bị trùng lặp cho mọi tài nguyên lớn xuất hiện trên nhiều hơn một trang web.

Tại sao vấn đề tải xuống trùng lặp lại quan trọng vào lúc này

Sự lãng phí này có thể thấy rõ với các tệp nhỏ—như phông chữ web hoặc vài megabyte JavaScript—nhưng nó sẽ trở nên cực kỳ nghiêm trọng khi tài nguyên là một mô hình AI nặng nhiều gigabyte hoặc một mô-đun WebAssembly.

Cách thức hoạt động của Cross-Origin Storage (COS) API

Đề xuất này thay thế việc tra cứu dựa trên URL bằng việc tra cứu dựa trên nội dung (content-addressed). Một trang web sẽ cung cấp mã băm SHA-256 của tệp mà nó muốn. Trình duyệt sẽ kiểm tra kho lưu trữ cục bộ để tìm mã băm chính xác đó, bất kể nguồn nào đã tải nó về ban đầu. Nếu tệp đã có sẵn, trình duyệt sẽ cung cấp nó; nếu không, nó sẽ tải tệp từ mạng và lưu trữ dưới mã băm đó để tái sử dụng xuyên nguồn (cross-origin) trong tương lai.

  • Định danh bằng mã băm. Mã băm đại diện duy nhất cho các byte của tệp, chứ không phải vị trí của nó.
  • Truy cập xuyên nguồn. Bất kỳ trang web nào biết mã băm đều có thể yêu cầu tệp, ngay cả khi nó có nguồn gốc từ nơi khác.
  • Chia sẻ bộ nhớ đệm cục bộ. Cùng một bản sao vật lý có thể đáp ứng nhiều yêu cầu khác nhau.

API này được thiết kế có chủ đích là rất hẹp: nó không thay thế Cache API hay IndexedDB hiện có. Những công cụ đó vẫn là lựa chọn cho việc lưu trữ đa mục đích; COS là một lối tắt chuyên dụng cho các khối dữ liệu (blobs) lớn và giống hệt nhau.

Các biện pháp bảo vệ quyền riêng tư được tích hợp trong thiết kế

Việc cho phép các trang web thăm dò bộ nhớ đệm của người dùng có thể tái diễn các phương thức theo dõi mà việc phân tách bộ nhớ đệm vốn nhằm mục đích ngăn chặn. COS ngăn chặn rủi ro đó bằng ba quy tắc:

  1. Không liệt kê. Các tập lệnh không thể hỏi “bạn có những mã băm nào?”—kho lưu trữ này là không thể nhìn thấu (opaque).
  2. Yêu cầu mã băm đã biết. Một trang web chỉ có thể yêu cầu một tệp nếu nó đã biết chính xác mã băm. Việc thăm dò ngẫu nhiên là không thể nếu không có kiến thức trước đó.
  3. Ngưỡng phổ biến để truy cập toàn cầu. Một tệp phải đủ phổ biến—tức là "ẩn danh"—trước khi một nguồn khác có thể lấy nó. Các tệp hiếm sẽ vẫn bị cô lập với nguồn đã tải chúng lần đầu.

Những giới hạn này giúp API vẫn hữu ích cho các tài nguyên thực sự được chia sẻ, đồng thời ngăn chặn nó trở thành một kênh phụ (side channel) để lấy dấu vân tay trình duyệt (fingerprinting).

Điều cần theo dõi tiếp theo

Cross-Origin Storage API cung cấp một giải pháp trực tiếp cho vấn đề đang ngày càng lớn dần cùng với các tài nguyên khổng lồ trong trình duyệt. Việc cộng đồng web có thể cân bằng giữa hiệu quả băng thông và các đảm bảo về quyền riêng tư (vốn là động lực của việc phân tách bộ nhớ đệm) hay không sẽ quyết định liệu ý tưởng này có vượt qua được giai đoạn dự thảo hay không. Nếu thành công, các trình duyệt trong tương lai có thể cho phép bạn chỉ tải mô hình AI nặng hơn 30 GB một lần và tái sử dụng nó ở mọi nơi—giúp tiết kiệm thời gian, dữ liệu và năng lượng.