SXG เป็นกลไกการนำส่งที่ทำให้สามารถตรวจสอบสิทธิ์ต้นทางของทรัพยากรอย่างอิสระจากวิธีการนำส่งทรัพยากรได้
Signed Exchange (SXG) เป็นกลไกการนำส่งที่ทำให้สามารถตรวจสอบสิทธิ์ต้นทางของทรัพยากรแบบอิสระจากวิธีการนำส่งทรัพยากรได้ การใช้ SXG ช่วยปรับปรุง Largest Contentful Paint (LCP) ได้ด้วยการเปิดใช้การดึงข้อมูลล่วงหน้าข้ามแหล่งที่มาเพื่อรักษาความเป็นส่วนตัว นอกจากนี้ การแยกนี้ยังช่วยเพิ่มกรณีการใช้งานที่หลากหลาย เช่น ประสบการณ์การใช้งานอินเทอร์เน็ตแบบออฟไลน์และการแสดงผลจากแคชของบุคคลที่สาม
บทความนี้จะให้ภาพรวมที่ครอบคลุมเกี่ยวกับ SXG ซึ่งรวมถึงวิธีการทํางาน กรณีการใช้งาน และเครื่องมือ
ความเข้ากันได้กับเบราว์เซอร์
SXG คือรองรับเบราว์เซอร์แบบ Chromium (เริ่มตั้งแต่เวอร์ชัน Chrome 73, Edge 79 และ Opera 64)
ภาพรวม
SXG เป็นกรณีการใช้งานหลักที่ใช้แคชเพื่อดึงข้อมูลล่วงหน้าและแสดงเนื้อหาที่มีการลงนามแบบเข้ารหัสโดยต้นทาง ซึ่งจะช่วยเพิ่มความเร็วในการไปยังส่วนต่างๆ ข้ามแหล่งที่มาจากเว็บไซต์อ้างอิง และช่วยให้มั่นใจว่าหน้าเว็บจะไม่มีการแก้ไขและมีการระบุแหล่งที่มาอย่างถูกต้อง ระบบจะซ่อนข้อมูลที่อาจระบุตัวตนได้จนกว่าผู้ใช้จะไปยังเว็บไซต์หนึ่งๆ เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ Google Search เป็นผู้ใช้กลุ่มแรกๆ ที่ใช้ประโยชน์จากความสามารถในการดึงข้อมูลล่วงหน้าของ SXG และสำหรับเว็บไซต์ที่รับการเข้าชมส่วนใหญ่จาก Google Search นั้น SXG อาจเป็นเครื่องมือสําคัญในการโหลดหน้าเว็บให้ผู้ใช้ได้เร็วขึ้น ในอนาคต เราหวังว่าผลกระทบนี้จะขยายไปสู่ผู้บอกต่อเพิ่มเติม
วิธีการทำงาน
เว็บไซต์จะเซ็นชื่อคู่คําขอ/การตอบกลับ ("HTTP Exchange") ในลักษณะที่ทําให้เบราว์เซอร์ยืนยันแหล่งที่มาและความสมบูรณ์ของเนื้อหาได้โดยไม่ขึ้นอยู่กับวิธีเผยแพร่เนื้อหา ดังนั้น เบราว์เซอร์จะแสดง URL ของเว็บไซต์ต้นทางในแถบที่อยู่แทน URL ของเซิร์ฟเวอร์ที่แสดงเนื้อหาได้
ที่ผ่านมา วิธีเดียวที่เว็บไซต์จะใช้บุคคลที่สามเพื่อเผยแพร่เนื้อหาของตนไปพร้อมๆ กับการระบุแหล่งที่มาได้คือต้องแชร์ใบรับรอง SSL กับผู้ให้บริการ ซึ่งมีข้อเสียด้านความปลอดภัย และยังไม่ช่วยให้เนื้อหาใช้งานได้อย่างแท้จริง
รูปแบบ SXG
SXG ได้รับการบรรจุไว้ในไฟล์ที่เข้ารหัสไบนารีซึ่งมีคอมโพเนนต์หลัก 2 อย่าง ได้แก่ การแลกเปลี่ยน HTTP และลายเซ็นที่ครอบคลุมการแลกเปลี่ยน การแลกเปลี่ยน HTTP ประกอบด้วย URL คำขอ ข้อมูลการเจรจาต่อรองเนื้อหา และการตอบกลับ HTTP
format version: 1b3 request: method: GET uri: https://example.org/ headers: response: status: 200 headers: Cache-Control: max-age=604800 Digest: mi-sha256-03=kcwVP6aOwYmA/j9JbUU0GbuiZdnjaBVB/1ag6miNUMY= Expires: Mon, 24 Aug 2020 16:08:24 GMT Content-Type: text/html; charset=UTF-8 Content-Encoding: mi-sha256-03 Date: Mon, 17 Aug 2020 16:08:24 GMT Vary: Accept-Encoding signature: label;cert-sha256=<em>ViFgi0WfQ+NotPJf8PBo2T5dEuZ13NdZefPybXq/HhE=</em>; cert-url="https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE"; date=1597680503;expires=1598285303;integrity="digest/mi-sha256-03";sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>; validity-url="https://example.org/webpkg/validity" header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p> <p>The exchange has a valid signature. payload [1256 bytes]:</p> <pre class="prettyprint"><code><title>SXG example</title> <meta charset="utf-8"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; } </style> </code></pre> <div> <h1>Hello</h1> </div> <p>
พารามิเตอร์ expires
ในลายเซ็นระบุวันที่หมดอายุของ SXG
SXG อาจใช้ได้นานสุด 7 วัน ดูข้อมูลเพิ่มเติมเกี่ยวกับส่วนหัวลายเซ็นได้ในข้อกำหนดของ Signed HTTP Exchange
รองรับการปรับเปลี่ยนในแบบของคุณฝั่งเซิร์ฟเวอร์
SXG ที่มีส่วนหัว Vary: Cookie
จะแสดงต่อผู้ใช้ที่ไม่มีคุกกี้สําหรับ URL คำขอที่มีลายเซ็นเท่านั้น หากเว็บไซต์นำเสนอ HTML ที่แตกต่างกันแก่ผู้ใช้ที่ลงชื่อเข้าสู่ระบบ คุณจะใช้ฟีเจอร์นี้เพื่อใช้ประโยชน์จาก SXG ได้โดยไม่ต้องเปลี่ยนการใช้งาน ดูรายละเอียดเกี่ยวกับการปรับตามโปรไฟล์ของผู้ใช้ฝั่งเซิร์ฟเวอร์ด้วย SXG แบบไดนามิก
การจัดแพ็กเกจเว็บ
SXG เป็นส่วนหนึ่งของกลุ่มข้อเสนอข้อกำหนดการจัดแพ็กเกจเว็บที่กว้างกว่า นอกจาก SXG แล้ว คอมโพเนนต์หลักอีกอย่างหนึ่งของสเปคการแพ็กเกจเว็บคือกลุ่มเว็บ ("การแลกเปลี่ยน HTTP ที่รวมไว้ด้วยกัน") ชุดของเว็บคือคอลเล็กชันทรัพยากร HTTP และข้อมูลเมตาที่จําเป็นสําหรับตีความชุด
ความสัมพันธ์ระหว่าง SXG กับ Web Bundle เป็นประเด็นที่ทําให้สับสนได้ทั่วไป SXG และ Web Bundle เป็นเทคโนโลยีที่แตกต่างกัน 2 รายการที่ไม่ขึ้นอยู่กับกันและกัน Web Bundle สามารถใช้กับทั้ง Signed Exchange และ Unsigned Exchange ได้ เป้าหมายร่วมกันที่ทั้ง SXG และ Web Bundle มุ่งส่งเสริมคือการสร้างรูปแบบ "การสร้างแพ็กเกจเว็บไซต์" ที่อนุญาตให้แชร์เว็บไซต์ทั้งเว็บไซต์สำหรับการบริโภคแบบออฟไลน์
การเพิ่มความเร็วในการโหลดหน้าเว็บด้วย Signed Exchange
การเปิดใช้ Signed Exchange จะช่วยเร่งประสิทธิภาพของหน้าเว็บและส่งผลต่อ Core Web Vitals ของเว็บไซต์ โดยเฉพาะใน Largest Contentful Paint (LCP) Google Search เป็นผู้เริ่มใช้งานตั้งแต่เนิ่นๆ และใช้ SXG เพื่อให้ผู้ใช้ได้รับประสบการณ์การโหลดหน้าเว็บที่เร็วขึ้นสำหรับหน้าเว็บที่โหลดจากหน้าผลการค้นหา
Google Search จะรวบรวมข้อมูลและแคช SXG เมื่อมีให้ใช้งาน และดึงข้อมูล SXG ที่ผู้ใช้มีแนวโน้มที่จะเข้าชมล่วงหน้า เช่น หน้าเว็บที่เกี่ยวข้องกับผลการค้นหารายการแรก
SXG จะทำงานได้ดีที่สุดเมื่อใช้ร่วมกับการเพิ่มประสิทธิภาพอื่นๆ เช่น การใช้ CDN และการลดทรัพยากรย่อยที่บล็อกการแสดงผล หลังจากใช้งานแล้ว ให้ทําตามคําแนะนําเหล่านี้เพื่อรับประโยชน์สูงสุดจาก LCP จากการอ่านล่วงหน้า SXG ในหลายกรณี การเพิ่มประสิทธิภาพดังกล่าวอาจส่งผลให้หน้าเว็บจาก Google Search โหลดเกือบจะทันที
ผลกระทบของ Signed Exchange
จากการทดสอบที่ผ่านมา เราพบว่าการดึงข้อมูลล่วงหน้าที่เปิดใช้ SXG ลดลงเฉลี่ย 300 มิลลิวินาทีถึง 400 มิลลิวินาที ซึ่งช่วยให้เว็บไซต์สร้างความประทับใจแรกที่ดียิ่งขึ้นแก่ผู้ใช้และมักส่งผลเชิงบวกต่อเมตริกทางธุรกิจ
แบรนด์และเว็บไซต์หลายแห่งทั่วโลกได้รับประโยชน์จาก Signed Exchanges แล้ว มาดูกรณีศึกษาที่การใช้ Signed Exchanges ช่วยให้ RebelMouse ซึ่งเป็นระบบจัดการเนื้อหา (CMS) ที่โดดเด่น ปรับปรุงประสิทธิภาพและเมตริกทางธุรกิจของลูกค้าได้อย่างไร
- Narcity ปรับปรุง LCP ได้ 41%
- Paper Magazine มีเซสชันต่อผู้ใช้เพิ่มขึ้น 27%
- บล็อก MLT ลดเวลาในการโหลดหน้าเว็บลง 21%
Cloudflare พบว่า SXG ได้ปรับปรุง TTFB สำหรับเว็บไซต์จำนวน 98% ที่ทดสอบ และเพิ่ม LCP สำหรับ 85% ของเว็บไซต์โดยมีค่ามัธยฐานของการโหลดหน้าเว็บที่มีสิทธิ์ SXG เพิ่มขึ้นกว่า 20%
การจัดทำดัชนี
Google Search ไม่ได้จัดอันดับหรือจัดทำดัชนีการแสดงผล SXG และที่ไม่ใช่ SXG ของหน้าเว็บแตกต่างกัน ท้ายที่สุดแล้ว SXG คือกลไกการนำส่ง ไม่ได้เปลี่ยนแปลงเนื้อหาพื้นฐาน
AMP
คุณส่งเนื้อหา AMP โดยใช้ SXG ได้ SXG ช่วยให้สามารถดึงข้อมูลเนื้อหา AMP ล่วงหน้าและแสดงโดยใช้ Canonical URL แทน URL ของ AMP ได้ AMP มีเครื่องมือแยกต่างหากสำหรับสร้าง SXG ดูวิธีแสดง AMP โดยใช้ Signed Exchange ได้ที่ amp.dev
การแก้ไขข้อบกพร่อง SXG ด้วยเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
หากต้องการดู SXG ด้วยตนเอง ให้ใช้เบราว์เซอร์ Chromium, เปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์, เปิดแผงเครือข่าย และไปที่หน้าการค้นหาตัวอย่างนี้ คุณจะระบุ Signed Exchange ได้โดยมองหา signed-exchange
ในคอลัมน์ประเภท
แท็บแสดงตัวอย่างจะแสดงข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาของ SXG
เครื่องมือ
การติดตั้งใช้งาน SXG ประกอบด้วยการสร้าง SXG ที่สอดคล้องกับ URL หนึ่งๆ แล้วแสดง SXG นั้นต่อผู้ขอ (โดยปกติคือ Crawler)
ใบรับรอง
หากต้องการสร้าง SXG คุณจะต้องมีใบรับรองที่สามารถลงนามใน SXG แม้ว่าเครื่องมือบางรายการจะรับใบรับรองเหล่านี้โดยอัตโนมัติก็ตาม หน้านี้แสดงรายชื่อผู้ออกใบรับรองที่ออกใบรับรองประเภทนี้ได้ คุณขอใบรับรองจากผู้ออกใบรับรองของ Google โดยอัตโนมัติได้โดยใช้ไคลเอ็นต์ ACME ใดก็ได้ เซิร์ฟเวอร์ Web Packager มีไคลเอ็นต์ ACME ในตัว และ sxg-rs จะมีในเร็วๆ นี้
เครื่องมือ SXG เฉพาะแพลตฟอร์ม
เครื่องมือเหล่านี้รองรับ Technology Stack ที่เฉพาะเจาะจง หากคุณใช้แพลตฟอร์มที่เครื่องมือใดเครื่องมือหนึ่งรองรับอยู่แล้ว คุณอาจพบว่าการตั้งค่าง่ายกว่าเครื่องมืออเนกประสงค์
Signed Exchanges อัตโนมัติเป็นฟีเจอร์ของ Cloudflare ที่จะขอใบรับรองและสร้าง Signed Exchanges โดยอัตโนมัติ
โมดูล NGINX SXG จะสร้างและแสดง SXG สำหรับเว็บไซต์ที่ใช้ nginx ดูวิธีการตั้งค่าได้ที่นี่
Envoy SXG Filter สร้างและแสดง SXG สําหรับเว็บไซต์ที่ใช้ Envoy
เครื่องมือ SXG อเนกประสงค์
เซิร์ฟเวอร์ HTTP ของ sxg-rs
sxg-rs
http_server จะทําหน้าที่เป็นพร็อกซีย้อนกลับสําหรับแสดง SXG สําหรับคําขอจาก Crawler ของ SXG http_server
จะลงนามในการตอบกลับจากแบ็กเอนด์และตอบกลับด้วย SXG ดูวิธีการติดตั้งได้ที่ไฟล์ README
เซิร์ฟเวอร์เครื่องมือแพ็กเกจเว็บ
เซิร์ฟเวอร์ Web Packager webpkgserver
เป็นทางเลือกแทน sxg-rs http_server ที่เขียนด้วย Go ดูวิธีการตั้งค่าเซิร์ฟเวอร์ Web Packager ได้ที่วิธีตั้งค่า Signed Exchange โดยใช้ Web Packager
CLI ของ Web Packager
Web Packager CLI สร้าง SXG ที่สอดคล้องกับ URL ที่กำหนด
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
เมื่อสร้างไฟล์ SXG แล้ว ให้อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์และแสดงไฟล์ด้วยประเภท MIME application/signed-exchange;v=b3
นอกจากนี้ คุณจะต้องแสดงใบรับรอง SXG เป็น application/cert-chain+cbor
ไลบรารี SXG
คุณสามารถใช้ไลบรารีเหล่านี้เพื่อสร้างเครื่องมือสร้าง SXG ของคุณเองได้
sxg_rs
เป็นไลบรารี Rust สำหรับการสร้าง SXG ซึ่งเป็นคลัง SXG ที่มีคุณสมบัติมากที่สุดและใช้เป็นหลักสําหรับเครื่องมือcloudflare_worker
และfastly_compute
libsxg
เป็นไลบรารี C ขั้นต่ำสำหรับการสร้าง SXG โดยใช้เป็นพื้นฐานสำหรับโมดูล NGINX SXG และตัวกรอง Envoy SXGgo/signed-exchange
เป็นไลบรารี Go ขั้นต่ำที่ข้อกำหนดของ Webpackage ระบุไว้เพื่อการใช้งานอ้างอิงในการสร้าง SXG ซึ่งจะใช้เป็นพื้นฐานสำหรับเครื่องมือ CLI อ้างอิง,gen-signedexchange
และเครื่องมือ Web Packager ที่มีฟีเจอร์มากขึ้น
การเจรจาต่อรองเนื้อหา
เซิร์ฟเวอร์ควรแสดง SXG เมื่อส่วนหัว Accept ระบุว่าค่า q สำหรับ application/signed-exchange มากกว่าหรือเท่ากับค่า q สำหรับ text/html ในทางปฏิบัติ หมายความว่าเซิร์ฟเวอร์ต้นทางจะแสดง SXG แก่ Crawler แต่จะไม่แสดงต่อเบราว์เซอร์ เครื่องมือส่วนใหญ่ข้างต้นจะดำเนินการนี้โดยค่าเริ่มต้น แต่สำหรับเครื่องมืออื่นๆ คุณสามารถใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่ส่วนหัว Accept ของคำขอที่ควรแสดงเป็น SXG ได้
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
คําแนะนํานี้มีตัวอย่างสําหรับ Apache และ nginx
อัปเดต API ของแคช
แคช SXG ของ Google มี API ที่เจ้าของเว็บไซต์สามารถใช้เพื่อนำ SXG ออกจากแคชก่อนที่ SXG จะหมดอายุเนื่องจาก Cache-Control: max-age
ดูรายละเอียดได้ที่ข้อมูลอ้างอิงเกี่ยวกับ API อัปเดตแคช
การลิงก์กับ SXG
ทุกเว็บไซต์สามารถแคช แสดง และดึงข้อมูล SXG ของหน้าเว็บที่ลิงก์ไป (หากมี) ได้โดยใช้แท็ก และ :
html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
บทความนี้จะแสดงวิธีใช้ nginx เพื่อกระจาย SXG
ข้อได้เปรียบที่ไม่ซ้ำใคร
SXG เป็นหนึ่งในเทคโนโลยีหลายอย่างที่ใช้สำหรับการดึงข้อมูลล่วงหน้าข้ามแหล่งที่มา เมื่อตัดสินใจเลือกเทคโนโลยีที่จะใช้ คุณอาจต้องเลือกระหว่างการเพิ่มประสิทธิภาพในด้านต่างๆ ส่วนต่อไปนี้แสดงให้เห็นถึงค่าเฉพาะบางอย่างที่ SXG มีให้ในขอบเขตของโซลูชันที่เป็นไปได้ ปัจจัยเหล่านี้อาจเปลี่ยนแปลงเมื่อเวลาผ่านไปเนื่องจากโซลูชันที่มีให้ใช้งานมีการเปลี่ยนแปลง
มีการขอให้แสดงน้อยลง
เมื่อใช้การโหลดล่วงหน้าข้ามเว็บไซต์ เซิร์ฟเวอร์อาจต้องให้บริการคำขอเพิ่มเติม ซึ่งจะสอดคล้องกับกรณีที่มีการดึงข้อมูลหน้าเว็บล่วงหน้า แต่ผู้ใช้ไม่ได้เข้าชมหน้าเว็บหรือจำนวนไบต์ที่ดึงข้อมูลล่วงหน้าแสดงต่อผู้ใช้ไม่ได้ สำหรับ SXG คุณสามารถลดคำขอเพิ่มเติมที่ไม่ได้ใช้เหล่านี้ได้อย่างมาก
- ระบบจะแคช SXG และอาจส่งไปยังผู้ใช้จนกว่าจะหมดอายุ ดังนั้นการดึงข้อมูลล่วงหน้าจำนวนมากจึงได้รับการจัดการโดยเซิร์ฟเวอร์แคชเพียงอย่างเดียวเท่านั้น
- SXG สามารถแสดงต่อผู้ใช้ทั้งที่มีและไม่มีคุกกี้ในเว็บไซต์ ดังนั้น ระบบจึงต้องดึงข้อมูลหน้าเว็บอีกครั้งหลังจากการไปยังส่วนต่างๆ น้อยลง
การปรับปรุงความเร็วหน้าเว็บ
คุณอาจเห็นการปรับปรุงความเร็วหน้าเว็บเพิ่มเติมเนื่องจากแพลตฟอร์มและความสามารถของการดึงข้อมูลล่วงหน้าที่แพลตฟอร์มเหล่านี้รองรับในปัจจุบัน
- SXG สามารถแสดงแก่ผู้ใช้ที่มีคุกกี้สำหรับเว็บไซต์ของคุณ
- นอกจากนี้ SXG จะยังโหลดทรัพยากรย่อยล่วงหน้าสําหรับหน้าเว็บ เช่น JavaScript, CSS, แบบอักษร และรูปภาพ เมื่อระบุโดยใช้ส่วนหัว
Link
- ในอนาคตอันใกล้นี้ การดึงข้อมูล SXG ล่วงหน้าจาก Google Search จะพร้อมใช้งานสำหรับผลการค้นหาประเภทอื่นๆ มากขึ้น
บทสรุป
Signed Exchanges เป็นกลไกการนำส่งที่ช่วยให้ยืนยันแหล่งที่มาและความถูกต้องของทรัพยากรได้โดยไม่ขึ้นอยู่กับวิธีนำส่งทรัพยากร ด้วยเหตุนี้ บุคคลที่สามจึงสามารถเผยแพร่ SXG ได้ในขณะที่ยังคงมีการระบุแหล่งที่มาของผู้เผยแพร่โฆษณาอย่างเต็มรูปแบบ