ใครช่วยอธิบายการมัลติเพล็กซ์ที่เกี่ยวข้องกับ HTTP / 2 และวิธีการทำงานได้บ้าง
ใครช่วยอธิบายการมัลติเพล็กซ์ที่เกี่ยวข้องกับ HTTP / 2 และวิธีการทำงานได้บ้าง
คำตอบ:
พูดง่ายๆก็คือการมัลติเพล็กซ์ช่วยให้เบราว์เซอร์ของคุณสามารถปิดการร้องขอหลายรายการพร้อมกันบนการเชื่อมต่อเดียวกันและรับคำขอกลับในลำดับใดก็ได้
และตอนนี้สำหรับคำตอบที่ซับซ้อนมากขึ้น ...
เมื่อคุณโหลดหน้าเว็บมันจะดาวน์โหลดหน้า HTML มันจะเห็นว่ามันต้องการ CSS บางอย่าง, JavaScript บางอย่าง, การโหลดรูปภาพ ... ฯลฯ
ภายใต้ HTTP / 1.1 คุณสามารถดาวน์โหลดได้ครั้งละหนึ่งรายการบนการเชื่อมต่อ HTTP / 1.1 ของคุณ ดังนั้นเบราว์เซอร์ของคุณจะดาวน์โหลด HTML จากนั้นจะขอไฟล์ CSS เมื่อมีการส่งคืนระบบจะขอไฟล์ JavaScript เมื่อถูกส่งคืนระบบจะขอไฟล์ภาพแรก ... ฯลฯ โดยทั่วไปแล้ว HTTP / 1.1 นั้นเป็นแบบซิงโครนัสเมื่อคุณส่งคำขอคุณจะติดขัดจนกว่าคุณจะได้รับการตอบกลับ ซึ่งหมายความว่าเวลาส่วนใหญ่เบราว์เซอร์ไม่ได้ดำเนินการมากนักเนื่องจากได้เริ่มการร้องขอกำลังรอการตอบกลับจากนั้นจึงเริ่มการทำงานของคำขออื่นจากนั้นกำลังรอการตอบกลับ ... ฯลฯ แน่นอนว่าไซต์ที่ซับซ้อนด้วย JavaScript จำนวนมากต้องการให้เบราว์เซอร์ทำการประมวลผลจำนวนมาก แต่ขึ้นอยู่กับการดาวน์โหลด JavaScript ดังนั้นอย่างน้อยในช่วงแรกความล่าช้าที่สืบทอดไปยัง HTTP / 1.1 จะทำให้เกิดปัญหา โดยทั่วไปแล้วเซิร์ฟเวอร์ไม่ใช่ '
ดังนั้นปัญหาหลักอย่างหนึ่งบนเว็บในปัจจุบันคือเวลาแฝงของเครือข่ายในการส่งคำขอระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ อาจเป็นเพียงสิบหรือหลายร้อยมิลลิวินาทีซึ่งอาจดูเหมือนไม่มากนัก แต่เพิ่มขึ้นและมักเป็นส่วนที่ช้าที่สุดในการท่องเว็บโดยเฉพาะอย่างยิ่งเมื่อเว็บไซต์มีความซับซ้อนมากขึ้นและต้องการทรัพยากรเพิ่มเติม (เมื่อได้รับ) และการเข้าถึงอินเทอร์เน็ต ผ่านมือถือมากขึ้นเรื่อย ๆ (ซึ่งมีเวลาแฝงช้ากว่าบรอดแบนด์)
ตัวอย่างเช่นสมมติว่ามีทรัพยากร 10 รายการที่หน้าเว็บของคุณต้องโหลดหลังจากโหลด HTML แล้ว (ซึ่งเป็นไซต์ขนาดเล็กมากตามมาตรฐานปัจจุบันเนื่องจากทรัพยากรมากกว่า 100 รายการเป็นเรื่องปกติ แต่เราจะทำให้มันง่ายและใช้สิ่งนี้ ตัวอย่าง). และสมมติว่าแต่ละคำขอใช้เวลา 100 มิลลิวินาทีในการเดินทางข้ามอินเทอร์เน็ตไปยังเว็บเซิร์ฟเวอร์และย้อนกลับและเวลาในการประมวลผลที่ปลายทั้งสองด้านนั้นน้อยมาก (สมมติว่า 0 สำหรับตัวอย่างนี้เพื่อความเรียบง่าย) เนื่องจากคุณต้องส่งทรัพยากรแต่ละรายการและรอการตอบกลับทีละรายการการดำเนินการนี้จะใช้เวลา 10 * 100ms = 1,000ms หรือ 1 วินาทีในการดาวน์โหลดทั้งไซต์
เพื่อหลีกเลี่ยงปัญหานี้โดยปกติเบราว์เซอร์จะเปิดการเชื่อมต่อหลายรายการไปยังเว็บเซิร์ฟเวอร์ (โดยทั่วไปคือ 6) ซึ่งหมายความว่าเบราว์เซอร์สามารถส่งคำขอหลายรายการพร้อมกันได้ซึ่งดีกว่ามาก แต่ต้องใช้ความซับซ้อนในการตั้งค่าและจัดการการเชื่อมต่อหลายรายการ (ซึ่งส่งผลกระทบต่อทั้งเบราว์เซอร์และเซิร์ฟเวอร์) มาดูตัวอย่างก่อนหน้านี้ต่อไปและบอกว่ามีการเชื่อมต่อ 4 รายการและเพื่อความง่ายสมมติว่าคำขอทั้งหมดเท่ากัน ในกรณีนี้คุณสามารถแยกคำขอออกจากการเชื่อมต่อทั้งสี่ได้ดังนั้นสองรายการจะมีทรัพยากร 3 รายการที่จะได้รับและสองรายการจะมีทรัพยากร 2 รายการเพื่อรับทรัพยากรทั้งหมดสิบรายการ (3 + 3 + 2 + 2 = 10) ในกรณีนั้นกรณีที่เลวร้ายที่สุดคือ 3 รอบหรือ 300ms = 0.3 วินาที - เป็นการปรับปรุงที่ดี แต่ตัวอย่างง่ายๆนี้ไม่รวมค่าใช้จ่ายในการตั้งค่าการเชื่อมต่อหลายรายการ
HTTP / 2 ช่วยให้คุณสามารถส่งคำขอหลายรายการในไฟล์พร้อมกันการเชื่อมต่อ - ดังนั้นคุณไม่จำเป็นต้องเปิดการเชื่อมต่อหลายรายการตามด้านบน ดังนั้นเบราว์เซอร์ของคุณสามารถพูดว่า "Gimme this CSS file. Gimme that JavaScript file. Gimme image1.jpg. Gimme image2.jpg ... Etc. " เพื่อใช้การเชื่อมต่อเดียวอย่างเต็มที่ สิ่งนี้มีประโยชน์ด้านประสิทธิภาพที่ชัดเจนในการไม่ชะลอการส่งคำขอเหล่านั้นเพื่อรอการเชื่อมต่อฟรี คำขอทั้งหมดเหล่านี้ส่งผ่านอินเทอร์เน็ตไปยังเซิร์ฟเวอร์ในแบบขนาน (เกือบ) เซิร์ฟเวอร์ตอบสนองต่อแต่ละคนจากนั้นพวกเขาก็เริ่มหาทางกลับ ในความเป็นจริงมันทรงพลังยิ่งกว่านั้นเนื่องจากเว็บเซิร์ฟเวอร์สามารถตอบสนองต่อพวกเขาในลำดับใดก็ได้ที่รู้สึกเหมือนและส่งไฟล์กลับในลำดับที่แตกต่างกันหรือแม้กระทั่งแยกไฟล์ที่ร้องขอออกเป็นชิ้น ๆหัวหน้าบรรทัดปัญหาการบล็อก ) จากนั้นเว็บเบราว์เซอร์จะได้รับมอบหมายให้นำชิ้นส่วนทั้งหมดกลับมารวมกัน ในกรณีที่ดีที่สุด (สมมติว่าไม่มีการ จำกัด แบนด์วิดท์ - ดูด้านล่าง) หากคำขอทั้ง 10 รายการถูกไล่ออกพร้อมกันและเซิร์ฟเวอร์ได้รับคำตอบทันทีนั่นหมายความว่าคุณมีเวลาเดินทางไปกลับหนึ่งครั้งหรือ 100 มิลลิวินาทีหรือ 0.1 วินาทีถึง ดาวน์โหลดทรัพยากรทั้งหมด 10 รายการ และสิ่งนี้ไม่มีข้อเสียใด ๆ ที่การเชื่อมต่อหลายรายการมีสำหรับ HTTP / 1.1! นอกจากนี้ยังสามารถปรับขนาดได้มากขึ้นเนื่องจากทรัพยากรในแต่ละเว็บไซต์เติบโตขึ้น (ปัจจุบันเบราว์เซอร์เปิดการเชื่อมต่อแบบขนานถึง 6 การเชื่อมต่อภายใต้ HTTP / 1.1 แต่ควรเติบโตขึ้นเมื่อไซต์มีความซับซ้อนมากขึ้นหรือไม่)
แผนภาพนี้แสดงให้เห็นถึงความแตกต่างและมีรุ่นที่เคลื่อนไหวมากเกินไป
หมายเหตุ: HTTP / 1.1 มีแนวคิดในการไปป์ไลน์ซึ่งอนุญาตให้ส่งคำขอหลายรายการพร้อมกันได้ อย่างไรก็ตามพวกเขายังคงต้องถูกส่งคืนตามลำดับที่ได้รับการร้องขออย่างครบถ้วนดังนั้นจึงไม่มีที่ไหนใกล้เคียงกับ HTTP / 2 แม้ว่าแนวคิดจะคล้ายกันก็ตาม ไม่ต้องพูดถึงความจริงที่ว่านี้ได้รับการสนับสนุนจากทั้งเบราว์เซอร์และเซิร์ฟเวอร์ที่ไม่ค่อยมีใครใช้
สิ่งหนึ่งที่เน้นในความคิดเห็นด้านล่างคือแบนด์วิดท์ส่งผลต่อเราที่นี่อย่างไร แน่นอนว่าการเชื่อมต่ออินเทอร์เน็ตของคุณถูก จำกัด ด้วยจำนวนที่คุณสามารถดาวน์โหลดได้และ HTTP / 2 ไม่ได้ระบุถึงสิ่งนั้น ดังนั้นหากแหล่งข้อมูลทั้ง 10 รายการที่กล่าวถึงในตัวอย่างข้างต้นเป็นภาพคุณภาพการพิมพ์จำนวนมากก็จะยังดาวน์โหลดได้ช้า อย่างไรก็ตามสำหรับเว็บเบราว์เซอร์ส่วนใหญ่แบนด์วิดท์มีปัญหาน้อยกว่าเวลาในการตอบสนอง ดังนั้นหากทรัพยากรสิบรายการเหล่านี้เป็นรายการขนาดเล็ก (โดยเฉพาะทรัพยากรข้อความเช่น CSS และ JavaScript ซึ่งสามารถบีบอัดให้เล็กลงได้) เช่นเดียวกับที่พบบ่อยในเว็บไซต์แบนด์วิดท์ไม่ใช่ปัญหาจริงๆ แต่เป็นปริมาณทรัพยากรที่แท้จริงซึ่งมักจะเป็น ปัญหาและ HTTP / 2 ดูเหมือนจะแก้ไขปัญหานั้น นี่เป็นสาเหตุที่ใช้การเรียงต่อกันใน HTTP / 1.1 เป็นวิธีแก้ปัญหาอื่นดังนั้นตัวอย่างเช่น CSS ทั้งหมดมักจะรวมเข้าด้วยกันเป็นไฟล์เดียว:anti-pattern ภายใต้ HTTP / 2 - แม้ว่าจะมีข้อโต้แย้งต่อต้านการทำเช่นนั้นด้วยก็ตาม)
เพื่อให้เป็นตัวอย่างในโลกแห่งความเป็นจริงสมมติว่าคุณต้องสั่งซื้อสินค้า 10 ชิ้นจากร้านค้าเพื่อจัดส่งถึงบ้าน:
HTTP / 1.1 พร้อมการเชื่อมต่อเดียวหมายความว่าคุณต้องสั่งซื้อทีละรายการและคุณไม่สามารถสั่งซื้อรายการถัดไปได้จนกว่าจะถึงรายการสุดท้าย คุณเข้าใจได้ว่าต้องใช้เวลาหลายสัปดาห์ในการผ่านทุกสิ่ง
HTTP / 1.1 ที่มีการเชื่อมต่อหลายรายการหมายความว่าคุณสามารถมีคำสั่งซื้ออิสระจำนวน (จำกัด ) ได้ทุกที่ในเวลาเดียวกัน
HTTP / 1.1 ด้วยการไปป์ไลน์หมายความว่าคุณสามารถขอรายการทั้ง 10 รายการทีละรายการโดยไม่ต้องรอ แต่แล้วพวกเขาทั้งหมดก็มาถึงตามลำดับที่คุณขอ และหากสินค้าชิ้นหนึ่งหมดคุณต้องรอก่อนที่คุณจะได้รับสินค้าที่คุณสั่งซื้อหลังจากนั้นแม้ว่าสินค้าในภายหลังเหล่านั้นจะอยู่ในสต็อกจริงก็ตาม! ดีกว่าเล็กน้อย แต่ก็ยังมีความล่าช้าอยู่และสมมติว่าร้านค้าส่วนใหญ่ไม่สนับสนุนวิธีการสั่งซื้อแบบนี้อยู่ดี
HTTP / 2 หมายความว่าคุณสามารถสั่งซื้อสินค้าตามลำดับใดก็ได้โดยไม่เกิดความล่าช้าใด ๆ ทางร้านจะจัดส่งให้เมื่อพร้อมดังนั้นพวกเขาอาจมาในลำดับที่แตกต่างจากที่คุณขอและพวกเขาอาจแยกรายการเพื่อให้บางส่วนของคำสั่งซื้อนั้นมาถึงก่อน (ดีกว่าด้านบน) ท้ายที่สุดแล้วสิ่งนี้ควรหมายถึงคุณ 1) ทำทุกอย่างให้เร็วขึ้นโดยรวมและ 2) สามารถเริ่มทำงานในแต่ละรายการได้เมื่อมาถึง ("โอ้ไม่ดีอย่างที่คิดไว้ดังนั้นฉันอาจต้องการสั่งอย่างอื่นด้วยหรือแทน" ).
แน่นอนว่าคุณยังคงถูก จำกัด ด้วยขนาดของรถตู้ของบุรุษไปรษณีย์ (แบนด์วิดท์) ดังนั้นพวกเขาอาจต้องทิ้งพัสดุบางส่วนไว้ที่สำนักงานคัดแยกจนกว่าจะถึงวันถัดไปหากพวกเขาเต็มในวันนั้น แต่ก็ไม่ค่อยมีปัญหาเมื่อเทียบกัน เพื่อความล่าช้าในการส่งคำสั่งซื้อทั้งข้ามและกลับ การท่องเว็บส่วนใหญ่เกี่ยวข้องกับการส่งจดหมายขนาดเล็กไปมาแทนที่จะเป็นแพ็คเกจขนาดใหญ่
หวังว่าจะช่วยได้
ขอมัลติเพล็กซ์
HTTP / 2 สามารถส่งคำขอข้อมูลหลายรายการพร้อมกันผ่านการเชื่อมต่อ TCP เดียว นี่เป็นคุณสมบัติขั้นสูงที่สุดของโปรโตคอล HTTP / 2 เนื่องจากช่วยให้คุณสามารถดาวน์โหลดไฟล์เว็บแบบอะซิงโครนัสจากเซิร์ฟเวอร์เดียว เบราว์เซอร์สมัยใหม่ส่วนใหญ่ จำกัด การเชื่อมต่อ TCP ไว้ที่เซิร์ฟเวอร์เดียว ซึ่งจะช่วยลดเวลาในการเดินทางไป - กลับเพิ่มเติม (RTT) ทำให้เว็บไซต์ของคุณโหลดได้เร็วขึ้นโดยไม่ต้องเพิ่มประสิทธิภาพใด ๆ และไม่จำเป็นต้องมีการแบ่งโดเมน
Ans ง่าย ๆ ( ที่มา ):
การมัลติเพล็กซ์หมายความว่าเบราว์เซอร์ของคุณสามารถส่งคำขอหลายรายการและรับการตอบกลับหลายรายการ "รวม" ไว้ในการเชื่อมต่อ TCP เดียว ดังนั้นปริมาณงานที่เกี่ยวข้องกับการค้นหา DNS และการจับมือจะถูกบันทึกไว้สำหรับไฟล์ที่มาจากเซิร์ฟเวอร์เดียวกัน
คำตอบที่ซับซ้อน / ละเอียด:
ดูคำตอบของ @BazzaDP
การมัลติเพล็กซ์ใน HTTP 2.0 เป็นประเภทของความสัมพันธ์ระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ที่ใช้การเชื่อมต่อเดียวเพื่อส่งคำขอและการตอบกลับหลายรายการพร้อมกันโดยสร้างแต่ละเฟรมจำนวนมากในกระบวนการนี้
การมัลติเพล็กซ์แยกออกจากความหมายการตอบสนองคำขอที่เข้มงวดและเปิดใช้งานความสัมพันธ์แบบหนึ่งต่อกลุ่มหรือหลายต่อหลายคน
เนื่องจากคำตอบของ @Juanma Menendez นั้นถูกต้องในขณะที่แผนภาพของเขาสับสนฉันจึงตัดสินใจปรับปรุงมันโดยชี้แจงความแตกต่างระหว่างการมัลติเพล็กซ์และการวางท่อซึ่งเป็นแนวคิดที่มักจะรวมกัน
การวางท่อ (HTTP / 1.1)
มีการส่งคำขอหลายรายการผ่านการเชื่อมต่อ HTTP เดียวกัน คำตอบจะได้รับในลำดับเดียวกัน หากการตอบกลับครั้งแรกใช้เวลานานคำตอบอื่น ๆ ต้องรอในบรรทัด คล้ายกับการไปป์ของ CPU ที่มีการดึงคำสั่งในขณะที่กำลังถอดรหัสคำสั่งอื่น คำสั่งหลายคำสั่งอยู่ในเที่ยวบินพร้อมกัน แต่คำสั่งนั้นจะยังคงอยู่
มัลติเพล็กซ์ (HTTP / 2)
มีการส่งคำขอหลายรายการในสิ่งเดียวกันเชื่อมต่อ HTTPคำตอบจะได้รับตามคำสั่งโดยพลการ ไม่ต้องรอการตอบสนองช้าที่บล็อกผู้อื่น คล้ายกับการดำเนินการคำสั่งนอกคำสั่งในซีพียูสมัยใหม่
หวังว่าภาพที่ปรับปรุงจะชี้แจงความแตกต่าง: