การเปลี่ยนแปลงสตริง User Agent, กลยุทธ์ที่ Chrome และ Firefox ใช้เพื่อลดผลกระทบ และวิธีที่คุณจะช่วยได้
Chrome และ Firefox จะเผยแพร่เป็นเวอร์ชัน 100 ในอีกไม่กี่เดือนข้างหน้า ซึ่งมีโอกาสที่จะก่อให้เกิดความเสียหายในเว็บไซต์ที่อาศัยการระบุเวอร์ชันของเบราว์เซอร์เพื่อทำงานตามตรรกะทางธุรกิจ โพสต์นี้กล่าวถึงลำดับเวลาของเหตุการณ์ต่างๆ กลยุทธ์ที่ Chrome และ Firefox ใช้เพื่อลดผลกระทบ และวิธีที่คุณจะช่วยเหลือได้
สตริง User Agent
User-Agent (UA) เป็นสตริงที่เบราว์เซอร์ส่งส่วนหัว HTTP เพื่อให้เซิร์ฟเวอร์ระบุเบราว์เซอร์ได้ คุณยังเข้าถึงสตริงผ่าน JavaScript ด้วย navigator.userAgent
ได้อีกด้วย
ซึ่งมักจะมีรูปแบบดังนี้
<browser_name>/<major_version>.<minor_version>
ตัวอย่างเช่น เบราว์เซอร์เวอร์ชันล่าสุด ณ เวลาที่เผยแพร่โพสต์นี้
- Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36
- Firefox:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0
- Safari:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15
เวอร์ชันหลัก 100 - หมายเลขเวอร์ชัน 3 หลัก
เวอร์ชันหลัก 100 เป็นความสำเร็จครั้งใหญ่ของทั้ง Chrome และ Firefox และยังมีโอกาสที่จะก่อให้เกิดความเสียหายในเว็บไซต์ต่างๆ เมื่อเราเปลี่ยนจาก 2 หลักไปเป็นหมายเลขเวอร์ชัน 3 หลัก นักพัฒนาเว็บใช้เทคนิคทุกชนิดในการแยกวิเคราะห์สตริงเหล่านี้ ตั้งแต่โค้ดที่กำหนดเองไปจนถึงการใช้ไลบรารีการแยกวิเคราะห์ User Agent ซึ่งจะนำไปใช้เพื่อระบุตรรกะการประมวลผลที่เกี่ยวข้องได้ User Agent และกลไกการรายงานเวอร์ชันอื่นๆ จะรายงานหมายเลขเวอร์ชัน 3 หลักในเร็วๆ นี้
ไทม์ไลน์ของเวอร์ชัน 100
เบราว์เซอร์เวอร์ชัน 100 จะเปิดตัวในเวอร์ชันทดลองก่อน (Chrome Canary, Firefox Nightly) จากนั้นจะเป็นรุ่นเบต้า และสุดท้ายคือในเวอร์ชันเสถียร
เบราว์เซอร์ | ไทม์ไลน์ |
---|---|
Chrome (กำหนดการเผยแพร่) | 29 มีนาคม 2022 |
Firefox (กำหนดการเผยแพร่) | 3 พฤษภาคม 2022 |
เหตุใดหมายเลขเวอร์ชัน 3 หลักจึงอาจเป็นปัญหาได้
เมื่อเบราว์เซอร์เป็นเวอร์ชัน 10 เป็นครั้งแรกเมื่อราวๆ 12 ปีที่แล้ว เราตรวจพบปัญหาหลายอย่าง ซึ่งมีไลบรารีการแยกวิเคราะห์ User-Agent เมื่อหมายเลขเวอร์ชันหลักเปลี่ยนจาก 1 เป็น 2 หลัก
เมื่อไม่มีข้อกำหนดเฉพาะที่ต้องปฏิบัติตาม เบราว์เซอร์ต่างๆ จะมีรูปแบบต่างๆ สำหรับสตริง User-Agent และการแยกวิเคราะห์ User-Agent เฉพาะเว็บไซต์ เป็นไปได้ว่าไลบรารีการแยกวิเคราะห์บางรายการอาจมีสมมติฐานหรือข้อบกพร่องแบบฮาร์ดโค้ดที่ไม่ได้คำนึงถึงหมายเลขเวอร์ชันหลัก 3 หลัก ไลบรารีหลายแห่งปรับปรุงตรรกะการแยกวิเคราะห์เมื่อเบราว์เซอร์เปลี่ยนไปใช้หมายเลขเวอร์ชัน 2 หลัก ดังนั้นการบรรลุเป้าหมาย 3 หลักคาดว่าจะทำให้เกิดปัญหาน้อยลง Mike Taylor วิศวกรของทีม Chrome ได้ทำการสำรวจไลบรารีการแยกวิเคราะห์ UA ที่พบบ่อย ซึ่งไม่พบปัญหาใดๆ การทดสอบ Chrome ในภาคสนามแสดงให้เห็นปัญหาที่กำลังดำเนินการ
เบราว์เซอร์จัดการกับเรื่องนี้อย่างไร
ทั้ง Firefox และ Chrome ต่างทำการทดสอบโดยที่เวอร์ชันปัจจุบันของรายงานเบราว์เซอร์เป็นเวอร์ชันหลัก 100 เพื่อตรวจหาข้อขัดข้องที่อาจเป็นไปได้ของเว็บไซต์ ปัญหานี้ส่งผลให้มีปัญหาที่รายงาน 2-3 ข้อ และปัญหาบางรายการก็มีการได้รับการแก้ไขแล้ว การทดสอบเหล่านี้จะยังคงทำงานต่อไปจนกระทั่งเปิดตัวเวอร์ชัน 100
นอกจากนี้ ยังมีกลยุทธ์การลดปัญหาข้อมูลสำรองเอาไว้ด้วย ในกรณีที่เวอร์ชัน 100 เผยแพร่ไปยังเวอร์ชันที่เสถียรจะสร้างความเสียหายต่อเว็บไซต์มากกว่าที่คาดไว้
การลดความเสี่ยงของ Chrome
ใน Chrome แผนสำรองคือการใช้แฟล็กเพื่อตรึงเวอร์ชันหลักไว้ที่ 99 และรายงานหมายเลขเวอร์ชันหลักจริงในส่วนเวอร์ชันย่อยของสตริง User-Agent (โค้ดลงจอดแล้วแล้ว)
เวอร์ชัน Chrome ตามที่รายงานในสตริง User-Agent ใช้รูปแบบ <major_version>.<minor_version>.<build_number>.<patch_number>
หากมีการใช้แผนการสำรองข้อมูล สตริง User-Agent จะมีลักษณะดังนี้
99.101.4988.0
นอกจากนี้ Chrome ยังดำเนินการทดสอบเพื่อให้แน่ใจว่าการรายงานค่า 3 หลักในส่วนเวอร์ชันย่อยของสตริงจะไม่ส่งผลให้เกิดความเสียหาย เนื่องจากเวอร์ชันย่อยในสตริง User-Agent ของ Chrome ได้รายงานเป็น 0 เป็นเวลานานมาก ทีม Chrome จะตัดสินใจว่าจะใช้ตัวเลือกสำรองหรือไม่โดยพิจารณาจากจำนวนและความรุนแรงของปัญหาที่รายงาน
การลดความเสี่ยงของ Firefox
กลยุทธ์ใน Firefox จะขึ้นอยู่กับความสำคัญของความเสียหาย Firefox มีกลไกการแทรกแซงเว็บไซต์
ทีม Mozilla Webcompat สามารถแก้ปัญหาเว็บไซต์ที่เสียหายใน Firefox ได้ด้วยกลไกนี้ หากพิมพ์ about:compat
ในแถบ URL ของ Firefox คุณจะเห็นสิ่งที่กำลังได้รับการแก้ไขอยู่ หากเว็บไซต์ขัดข้องโดยที่เวอร์ชันหลักคือ 100 ในโดเมนใดโดเมนหนึ่ง คุณจะแก้ไขได้โดยส่งเวอร์ชัน 99 แทน
หากเกิดความเสียหายในวงกว้าง อาจตรึงหมายเลขเวอร์ชันหลักได้ จากนั้นมีกลยุทธ์ที่เป็นไปได้ที่แตกต่างกัน แต่ละแบบพร้อมทั้งข้อดีและข้อเสีย Mozilla สามารถส่งหมายเลขเวอร์ชันจริงเป็นตัวเลขเวอร์ชันย่อย ตรึงสตริงไว้ตามที่เป็นอยู่ หรือส่งหมายเลขเวอร์ชันจริงผ่านพารามิเตอร์อื่นๆ ก็ได้
ทุกกลยุทธ์ที่เพิ่มความซับซ้อนให้กับสตริง User-Agent ส่งผลกระทบอย่างมากต่อระบบนิเวศ มาช่วยกันหลีกเลี่ยง พฤติกรรมแปลกๆ อีก
คุณช่วยอะไรได้บ้าง
ใน Chrome และ Firefox Nightly คุณสามารถกำหนดค่าเบราว์เซอร์ให้รายงานเวอร์ชันเป็น 100 ได้ทันทีและรายงานปัญหาที่คุณพบ
กำหนดค่า Chrome เพื่อรายงานเวอร์ชันหลักเป็น 100
- ไปที่
chrome://flags/#force-major-version-to-100
- ตั้งค่าตัวเลือกเป็น
Enabled
กำหนดค่า Firefox Nightly เพื่อรายงานเวอร์ชันหลักเป็น 100
- เปิดเมนูการตั้งค่าของ Firefox Nightly
- ค้นหา "Firefox 100" แล้วเลือกตัวเลือก "Firefox 100 User-Agent String"
ทดสอบและส่งรายงาน
- หากคุณเป็นผู้ดูแลเว็บไซต์ ให้ทดสอบเว็บไซต์กับ Chrome และ Firefox 100 ตรวจสอบโค้ดการแยกวิเคราะห์และไลบรารีของ User Agent ให้แน่ใจว่าจัดการหมายเลขเวอร์ชัน 3 หลักได้ เราได้รวบรวมรูปแบบที่ได้รับความนิยมในขณะนี้
- หากคุณพัฒนาไลบรารีการแยกวิเคราะห์ User Agent ให้เพิ่มการทดสอบเพื่อแยกวิเคราะห์เวอร์ชันที่มากกว่าหรือเท่ากับ 100 การทดสอบในช่วงแรกของเราแสดงให้เห็นว่า ไลบรารีเวอร์ชันล่าสุดสามารถจัดการได้อย่างถูกต้อง อย่างไรก็ตาม เว็บนั้นเป็นสิ่งเดิมที่สืบทอดมาอย่างยาวนาน ดังนั้นหากคุณมีไลบรารีการแยกวิเคราะห์เวอร์ชันเก่า ก็ถึงเวลาตรวจสอบปัญหาและการอัปเกรดในที่สุด
- หากคุณกำลังท่องเว็บและพบปัญหาเกี่ยวกับเวอร์ชันหลัก 100 ให้ส่งรายงานใน webcompat.com