การชี้แจงส่วนหัวของ Keep-alive


106

ฉันถูกขอให้สร้างไซต์และหนึ่งในผู้ร่วมพัฒนาบอกฉันว่าฉันจะต้องใส่ส่วนหัวที่มีชีวิตอยู่

ฉันอ่านมากเกี่ยวกับเรื่องนี้ แต่ฉันก็ยังมีคำถาม

msdn ->

การเชื่อมต่อแบบเปิดจะช่วยเพิ่มประสิทธิภาพเมื่อไคลเอ็นต์ทำการร้องขอหลายครั้งสำหรับเนื้อหาเว็บเพจเนื่องจากเซิร์ฟเวอร์สามารถส่งคืนเนื้อหาสำหรับแต่ละคำร้องขอได้เร็วขึ้น มิฉะนั้นเซิร์ฟเวอร์จะต้องเปิดการเชื่อมต่อใหม่สำหรับทุกคำขอ

มองไปที่

ใส่คำอธิบายภาพที่นี่

  • เมื่อ IIS (F) ส่งkeep aliveส่วนหัว ( หรือผู้ใช้ส่ง keep-ยังมีชีวิตอยู่ ) มันไม่ได้หมายความว่า ( E, C, B) บันทึกการเชื่อมต่อซึ่งเป็นเพียงสำหรับเซสชันของฉันได้อย่างไร
  • ข้อมูลนี้ถูกเก็บไว้ที่ไหน ( "การเชื่อมต่อนี้เป็นของ" Royi " )
  • หมายความว่าไม่มีใครสามารถใช้การเชื่อมต่อนั้นได้
  • ถ้าเป็นเช่นนั้นหมายความว่า keep alive-header - ลดจำนวนผู้ใช้การเชื่อมต่อที่ทับซ้อนกันหรือไม่
  • ถ้าเป็นเช่นนั้นการเชื่อมต่อจะบันทึกถึงฉันได้นานเท่าใด (กล่าวอีกนัยหนึ่งคือถ้าฉันยังคงมีชีวิตอยู่ - "เก็บ" ไว้จนถึงเมื่อไหร่?)

ps สำหรับผู้ที่สนใจ:

การคลิกหน้าตัวอย่างนี้จะส่งคืนส่วนหัวของ keep alive


2
Pfff ฉันเคยเห็นสิ่งนี้ในการบรรยาย แต่ฉันไม่ค่อยแน่ใจ ฉันคิดว่าการรักษาชีวิตอยู่บนเซิร์ฟเวอร์และผู้ใช้เท่านั้น ท้ายที่สุดทุกอย่างในระหว่างนั้นไม่ควรรู้ด้วยซ้ำว่าเป็น HTTP นับประสาอะไรกับการดูส่วนหัว
Noctua

คำแถลงที่ยกมาจาก MSDN เป็นเรื่องที่น่าเบื่อ เป็นไคลเอนต์ที่ต้องเปิดการเชื่อมต่อใหม่หากไม่มีการเก็บรักษาไว้
Marquis of Lorne

และหากคุณกำลังสร้างไซต์ไม่ใช่เว็บเซิร์ฟเวอร์หรือไคลเอนต์ส่วนหัวแบบ Keepalive ก็พร้อมให้คุณแล้ว
Marquis of Lorne

คำตอบ:


144

ข้อมูลนี้ถูกเก็บไว้ที่ไหน ("การเชื่อมต่อระหว่างคอมพิวเตอร์Aและเซิร์ฟเวอร์F")

การเชื่อมต่อ TCP ได้รับการยอมรับโดย IP ต้นทางและพอร์ตและ IP ปลายทางและพอร์ต ระบบปฏิบัติการของคุณอุปกรณ์ที่รับรู้เซสชันระดับกลางทั้งหมดและระบบปฏิบัติการของเซิร์ฟเวอร์จะรับรู้การเชื่อมต่อจากสิ่งนี้

HTTP ทำงานร่วมกับการร้องขอการตอบสนอง: ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ดำเนินการตามคำขอและรับการตอบกลับ การเชื่อมต่อกับเซิร์ฟเวอร์ HTTP จะถูกปิดหลังจากการตอบกลับแต่ละครั้ง ด้วย HTTP keep-alive คุณจะเปิดการเชื่อมต่อ TCP พื้นฐานไว้จนกว่าจะตรงตามเกณฑ์ที่กำหนด

สิ่งนี้ช่วยให้มีคู่การตอบสนองการร้องขอหลายคู่ผ่านการเชื่อมต่อ TCP เดียวซึ่งจะช่วยลดการเริ่มต้นการเชื่อมต่อที่ค่อนข้างช้าของ TCP

เมื่อ IIS (F) ส่ง keep alive header (หรือผู้ใช้ส่ง keep-alive) หมายความว่า (E, C, B) บันทึกการเชื่อมต่อหรือไม่

ไม่เราเตอร์ไม่จำเป็นต้องจำเซสชัน ในความเป็นจริงแพ็คเก็ต TCP หลายแพ็กเก็ตที่อยู่ในเซสชัน TCP เดียวกันไม่จำเป็นต้องใช้เราเตอร์เดียวกันทั้งหมดนั่นคือเพื่อให้ TCP จัดการ เราเตอร์เพียงแค่เลือกเส้นทาง IP ที่ดีที่สุดและส่งต่อแพ็กเก็ต Keep-alive มีไว้สำหรับไคลเอนต์เซิร์ฟเวอร์และอุปกรณ์ที่รับรู้เซสชันระดับกลางอื่น ๆ เท่านั้น

ซึ่งมีไว้สำหรับเซสชันของฉันเท่านั้น

หมายความว่าไม่มีใครสามารถใช้การเชื่อมต่อนั้นได้

นั่นคือความตั้งใจของการเชื่อมต่อ TCP : เป็นการเชื่อมต่อแบบ end-to-end ที่มีไว้สำหรับสองฝ่ายเท่านั้น

ถ้าเป็นเช่นนั้นหมายความว่า keep alive-header - ลดจำนวนผู้ใช้การเชื่อมต่อที่ทับซ้อนกันหรือไม่

กำหนด "การเชื่อมต่อที่ทับซ้อนกัน" ดูการเชื่อมต่อแบบต่อเนื่องของ HTTPสำหรับข้อดีและข้อเสียบางประการเช่น:

  • ลดการใช้งาน CPU และหน่วยความจำ (เนื่องจากเปิดการเชื่อมต่อน้อยลงพร้อมกัน)
  • เปิดใช้งานการไปป์ไลน์ HTTP ของคำขอและการตอบกลับ
  • ลดความแออัดของเครือข่าย (การเชื่อมต่อ TCP น้อยลง)
  • ลดเวลาแฝงในคำขอที่ตามมา (ไม่มีการจับมือกัน)

ถ้าเป็นเช่นนั้นการเชื่อมต่อจะบันทึกถึงฉันได้นานเท่าใด (กล่าวอีกนัยหนึ่งคือถ้าฉันยังคงมีชีวิตอยู่ - "เก็บ" ไว้จนถึงเมื่อไหร่?)

การตอบสนองต่อชีวิตโดยทั่วไปมีลักษณะดังนี้:

Keep-Alive: timeout=15, max=100

โปรดดูHypertext Transfer Protocol (HTTP) Keep-Alive Header (แบบร่างสำหรับ HTTP / 2 ที่มีการอธิบายส่วนหัวของ Keep-alive โดยละเอียดมากกว่าทั้ง2616และ2086 ):

  • โฮสต์ตั้งค่าของtimeoutพารามิเตอร์เป็นเวลาที่โฮสต์จะอนุญาตให้การเชื่อมต่อที่ไม่ได้ใช้งานยังคงเปิดอยู่ก่อนที่จะปิด การเชื่อมต่อไม่ได้ใช้งานหากไม่มีการส่งหรือรับข้อมูลจากโฮสต์

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

อย่างไรก็ตามเซิร์ฟเวอร์มีอิสระที่จะปิดการเชื่อมต่อหลังจากเวลาหรือตามจำนวนคำขอโดยพลการ (ตราบเท่าที่ส่งคืนการตอบกลับไปยังคำขอปัจจุบัน) วิธีการใช้งานขึ้นอยู่กับเซิร์ฟเวอร์ HTTP ของคุณ


กำหนด "การเชื่อมต่อที่ทับซ้อนกัน" ----> ฉันหมายถึงพร้อมกัน (และฉันคิดว่าจำนวนการเชื่อมต่อพร้อมกันจะลดลงเพราะอย่างที่คุณพูด: "การเชื่อมต่อ X สงวนไว้สำหรับ John เพราะมันใช้ส่วนหัวที่มีชีวิตอยู่" .... ฉันพูดถูกไหม
Royi Namir

1
ดังนั้นสิ่งที่คุณกำลังพูดก็คือถ้าเซิร์ฟเวอร์สามารถรองรับการเชื่อมต่อได้ 100 ครั้งต่อครั้งและการเชื่อมต่อทั้งหมดนั้นใช้การมีชีวิตอยู่การเชื่อมต่อที่ 101 จะถูกทิ้ง ???
Royi Namir

1
@Royi ไม่ฉันไม่รู้ว่าเบราว์เซอร์เชื่อมต่อกับโฮสต์ที่กำหนดไว้มีการเชื่อมต่อกี่ครั้งและฉันไม่ได้ตั้งใจจะบอกว่าเบราว์เซอร์จะเปิดได้เพียงอันเดียว จำนวนของการร้องขอที่ทำไปพร้อม ๆ กันจะถูกจำกัด และแตกต่างกันต่อเบราว์เซอร์ ฉันหมายความว่าหากเบราว์เซอร์ใช้การเชื่อมต่อที่ยังคงมีชีวิตอยู่มันอาจแทนการNร้องขอไฟผ่านNการเชื่อมต่อ (ตามค่าเริ่มต้นการเชื่อมต่อจะถูกปิดหลังจากการตอบสนองทุกครั้ง) ตัวอย่างเช่นNคำขอเริ่มการทำงานผ่านN / Mหรือแม้กระทั่งMการเชื่อมต่อเนื่องจากสามารถส่งคำขอได้หลายรายการ การเชื่อมต่อที่เปิดแต่ละครั้งจึงใช้งานได้น้อยลง
CodeCaster

1
ฉันรู้ว่า (:-)) คุณกล่าวว่าในความคิดเห็นของคุณ:. ลูกค้าจะทำให้การเชื่อมต่อพร้อมกันน้อยลงเมื่อใช้ keep-ชีวิตอยู่ก็จะยิงคำขอในอนุกรมที่ไม่ parallell ฉันไม่เข้าใจว่ามันเกี่ยวข้องกับการเอาแต่ใจ
Royi Namir

5
E, C, B ไม่บันทึกเซสชัน นี่คือเราเตอร์พวกเขาไม่มีตารางเซสชันและไม่จำเป็นต้องมีเนื่องจากหลายแพ็กเก็ตจากเซสชันไคลเอนต์ไปยังเซิร์ฟเวอร์ TCP เดียวกันอาจตามเส้นทางที่แตกต่างกัน บทบาทของเราเตอร์คือการเลือกเส้นทาง IP ที่ดีที่สุดและส่งต่อแพ็กเก็ตตามลำดับดังนั้นจึงไม่ขึ้นไปที่เลเยอร์การขนส่ง (TCP / UDP) หรือไปที่เลเยอร์แอปพลิเคชันเพื่อดูส่วนหัวที่มีชีวิตอยู่ ดังนั้นโดยทั่วไปการรักษาชีวิตจึงเป็นไปอย่างชัดเจนระหว่างไคลเอนต์และเซิร์ฟเวอร์และโดยปริยายจะช่วยให้เซสชันรับรู้อุปกรณ์ - ไฟร์วอลล์ - เปิดให้กับเซสชันไคลเอนต์ต่อเซิร์ฟเวอร์อย่างชัดเจน
Amine Kadimi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.