Cross Origin Storage API: หยุดการดาวน์โหลดไฟล์ซ้ำซ้อน

Cross Origin Storage API อาจช่วยให้เบราว์เซอร์สามารถแชร์โมเดล AI ขนาด 33 GB ระหว่างสองเว็บไซต์ได้ ซึ่งจะช่วยลดปริมาณข้อมูลที่คุณต้องดาวน์โหลดจาก 66 GB เหลือเพียง 33 GB

ในอดีต เบราว์เซอร์เคยอนุญาตให้เว็บไซต์ใดก็ได้นำไฟล์ที่เว็บไซต์อื่นเคยดาวน์โหลดไปแล้วมาใช้ซ้ำ เช่น หากคุณโหลด React bundle ชุดเดียวกันจาก CDN ในสองหน้าเว็บ เบราว์เซอร์จะดึงสำเนาจากแคชมาให้ในครั้งที่สอง แต่การเปลี่ยนแปลงที่เน้นความเป็นส่วนตัวหลายประการได้ทำลายความสะดวกสบายนั้นลง โดยปัจจุบันเบราว์เซอร์จะแบ่งส่วนแคช (partition caches) ตามเว็บไซต์ ดังนั้นแม้จะเป็น URL ที่เหมือนกันทุกประการ แต่ก็จะถูกจัดเก็บแยกกันสำหรับแต่ละ origin ผลที่ตามมาคือเกิดการรับส่งข้อมูลซ้ำซ้อนสำหรับทุกๆ asset ขนาดใหญ่ที่ปรากฏบนมากกว่าหนึ่งเว็บไซต์

ทำไมปัญหาการดาวน์โหลดซ้ำซ้อนถึงสำคัญในตอนนี้

ความสิ้นเปลืองนี้อาจเห็นได้ชัดในไฟล์ขนาดเล็ก เช่น ฟอนต์เว็บ หรือ JavaScript ขนาดไม่กี่เมกะไบต์ แต่จะกลายเป็นปัญหาใหญ่เมื่อ asset นั้นเป็นโมเดล AI ขนาดหลายกิกะไบต์ หรือโมดูล WebAssembly

Cross Origin Storage (COS) API ทำงานอย่างไร

ข้อเสนอนี้เปลี่ยนจากการค้นหาด้วย URL มาเป็นการค้นหาด้วยเนื้อหา (content-addressed) โดยเว็บไซต์จะระบุค่า SHA-256 hash ของไฟล์ที่ต้องการ จากนั้นเบราว์เซอร์จะตรวจสอบในที่เก็บข้อมูลในเครื่องว่ามี hash ที่ตรงกันเป๊ะหรือไม่ โดยไม่สนใจว่า origin ใดเป็นผู้ดาวน์โหลดมาในตอนแรก หากมีไฟล์อยู่แล้ว เบราว์เซอร์จะส่งไฟล์นั้นให้ทันที แต่หากไม่มี เบราว์เซอร์จะดาวน์โหลดไฟล์จากเครือข่ายและจัดเก็บไว้ภายใต้ hash นั้นเพื่อนำมาใช้ซ้ำข้าม origin ในอนาคต

  • ระบุด้วย hash. ค่า hash จะเป็นตัวแทนของไบต์ในไฟล์อย่างไม่ซ้ำกัน โดยไม่ขึ้นกับตำแหน่งที่อยู่ของไฟล์
  • การเข้าถึงข้าม origin. เว็บไซต์ใดก็ตามที่ทราบค่า hash สามารถร้องขอไฟล์ได้ แม้ว่าไฟล์นั้นจะมีต้นทางมาจากที่อื่นก็ตาม
  • การแชร์แคชในเครื่อง. สำเนาไฟล์ชุดเดียวกันสามารถตอบสนองการร้องขอได้หลายครั้ง

API นี้ถูกออกแบบมาให้มีขอบเขตที่จำกัดอย่างตั้งใจ โดยไม่ได้มาแทนที่ Cache API หรือ IndexedDB ที่มีอยู่เดิม เครื่องมือเหล่านั้นยังคงเป็นเครื่องมือสำหรับการจัดเก็บข้อมูลทั่วไป ส่วน COS เป็นทางลัดสำหรับวัตถุประสงค์เดียวคือการจัดการกับข้อมูลขนาดใหญ่ (blobs) ที่เหมือนกัน

มาตรการป้องกันความเป็นส่วนตัวที่ถูกสร้างไว้ในตัวการออกแบบ

การอนุญาตให้เว็บไซต์ตรวจสอบแคชของผู้ใช้ อาจเป็นการนำช่องทางการติดตาม (tracking vectors) ที่การแบ่งส่วนแคชพยายามจะยับยั้งกลับมาอีกครั้ง COS จึงปิดกั้นความเสี่ยงนั้นด้วยกฎ 3 ข้อ:

  1. ห้ามการไล่ตรวจสอบ (No enumeration). สคริปต์ไม่สามารถถามได้ว่า "คุณมี hash อะไรบ้าง?" เนื่องจากที่เก็บข้อมูลนั้นเป็นแบบปิด (opaque)
  2. ต้องทราบค่า hash เท่านั้น. เว็บไซต์จะร้องขอไฟล์ได้ก็ต่อเมื่อทราบค่า hash ที่ถูกต้องแม่นยำแล้วเท่านั้น การสุ่มตรวจสอบจึงเป็นไปไม่ได้หากไม่มีความรู้ล่วงหน้า
  3. เกณฑ์ความนิยมสำหรับการเข้าถึงทั่วโลก. ไฟล์ต้องมีความแพร่หลายเพียงพอ หรือกล่าวคือเป็นไฟล์ "นิรนาม" (anonymous) ก่อนที่ origin อื่นจะสามารถดึงข้อมูลไปใช้ได้ ไฟล์ที่หายากจะยังคงถูกจำกัดไว้เฉพาะ origin ที่ดาวน์โหลดมาครั้งแรกเท่านั้น

ข้อจำกัดเหล่านี้ช่วยให้ API ยังคงมีประโยชน์สำหรับ asset ที่ใช้ร่วมกันจริงๆ ในขณะที่ป้องกันไม่ให้มันกลายเป็นช่องทางรอง (side channel) สำหรับการทำ fingerprinting

สิ่งที่ต้องจับตามองต่อไป

Cross Origin Storage API นำเสนอวิธีแก้ไขปัญหาที่ตรงไปตรงมาสำหรับปัญหาที่ขยายตัวตามขนาดของ asset มหาศาลในเบราว์เซอร์ การที่ชุมชนเว็บจะสามารถสร้างสมดุลระหว่างประสิทธิภาพของแบนด์วิดท์กับหลักประกันความเป็นส่วนตัวที่เป็นแรงจูงใจในการแบ่งส่วนแคชได้หรือไม่ จะเป็นตัวตัดสินว่าแนวคิดนี้จะก้าวข้ามผ่านขั้นตอนร่างข้อเสนอ (draft stage) ได้หรือไม่ หากทำได้ เบราว์เซอร์ในอนาคตอาจช่วยให้คุณดาวน์โหลดโมเดล AI ขนาดกว่า 30 GB เพียงครั้งเดียวและนำไปใช้ซ้ำได้ทุกที่ ซึ่งจะช่วยประหยัดทั้งเวลา ข้อมูล และพลังงาน