การเปลี่ยนแปลงสตริง User Agent, กลยุทธ์ที่ Chrome และ Firefox ใช้เพื่อลดผลกระทบ และวิธีที่คุณช่วยได้
Chrome และ Firefox จะอัปเดตเป็นเวอร์ชัน 100 ในอีก 2-3 เดือน ซึ่งอาจทําให้เว็บไซต์ที่อาศัยการระบุเวอร์ชันเบราว์เซอร์เพื่อดําเนินตรรกะทางธุรกิจเกิดข้อผิดพลาด โพสต์นี้จะกล่าวถึงลำดับเวลาของเหตุการณ์ กลยุทธ์ที่ 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 เพื่อตรวจหาปัญหาที่อาจเกิดขึ้นกับเว็บไซต์ ซึ่งส่งผลให้เกิดปัญหาที่รายงานบางรายการ ซึ่งบางรายการได้รับการแก้ไขแล้ว การทดสอบเหล่านี้จะยังคงทํางานต่อไปจนกว่าจะมีการเผยแพร่เวอร์ชัน 100
นอกจากนี้ เรายังมีกลยุทธ์การบรรเทาผลกระทบสำรองไว้ด้วย ในกรณีที่การเผยแพร่เวอร์ชัน 100 ไปยังเวอร์ชันเสถียรทำให้เกิดความเสียหายต่อเว็บไซต์มากกว่าที่คาดไว้
การลดผลกระทบใน Chrome
ใน Chrome แผนสำรองคือการใช้ Flag เพื่อหยุดเวอร์ชันหลักไว้ที่ 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 สามารถแก้ไขเว็บไซต์ที่ใช้งานไม่ได้ใน 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" แล้วเลือกตัวเลือก "สตริง User Agent ของ Firefox 100"
ทดสอบและรายงานไฟล์
- หากคุณเป็นผู้ดูแลเว็บไซต์ ให้ทดสอบเว็บไซต์ด้วย Chrome และ Firefox 100 ตรวจสอบโค้ดและไลบรารีการแยกวิเคราะห์ User Agent และตรวจสอบว่าสามารถจัดการหมายเลขเวอร์ชัน 3 หลักได้ เราได้รวบรวมรูปแบบที่ใช้งานไม่ได้ในปัจจุบันไว้บางส่วน
- หากคุณพัฒนาคลังการแยกวิเคราะห์ User-Agent ให้เพิ่มการทดสอบเพื่อแยกวิเคราะห์เวอร์ชันที่มากกว่าหรือเท่ากับ 100 การทดสอบในช่วงแรกๆ แสดงให้เห็นว่าไลบรารีเวอร์ชันล่าสุดจัดการกับปัญหานี้ได้อย่างถูกต้อง อย่างไรก็ตาม เว็บมีประวัติอันยาวนาน ดังนั้นหากคุณมีไลบรารีการแยกวิเคราะห์เวอร์ชันเก่า ก็ถึงเวลาตรวจสอบปัญหาและอัปเกรดแล้ว
- หากคุณท่องเว็บและพบปัญหาเกี่ยวกับเวอร์ชันหลัก 100 ให้ส่งรายงานใน webcompat.com