“ การเชื่อมต่อ: ปิด” หมายถึงอะไรเมื่อใช้ในข้อความตอบกลับ


30

เมื่อไคลเอ็นต์ใช้Connection: closeส่วนหัวในข้อความคำขอซึ่งหมายความว่าต้องการให้เซิร์ฟเวอร์ปิดการเชื่อมต่อหลังจากส่งข้อความตอบกลับ

ฉันคิดว่าส่วนหัวนี้ใช้เฉพาะในข้อความคำขอเท่านั้น แต่ฉันสังเกตเห็นว่าส่วนหัวนี้ใช้ในข้อความตอบกลับด้วย ตัวอย่างเช่น:

ป้อนคำอธิบายรูปภาพที่นี่

ส่วนหัวนี้หมายความว่าอย่างไรเมื่อใช้ในข้อความตอบกลับ

ฉันคิดว่ามันหมายความว่าเซิร์ฟเวอร์จะปิดการเชื่อมต่อหลังจากส่งข้อความตอบกลับ (แม้ว่าลูกค้าจะใช้Connection: keep-aliveส่วนหัวในข้อความคำขอของมัน) ฉันถูกไหม?

คำตอบ:


28

ใช่ถูกต้องแล้ว เซิร์ฟเวอร์สามารถพูดว่า "ฉันไม่สนับสนุนคำขอแบบ keep-alive ของคุณและจะปิดการเชื่อมต่อเมื่อฉันทำเสร็จแล้ว"

จาก RFC 2616 มาตรา 14.10:

HTTP / 1.1 กำหนดตัวเลือกการเชื่อมต่อ "ปิด" สำหรับผู้ส่ง
สัญญาณว่าการเชื่อมต่อจะถูกปิดหลังจากการ
ตอบสนองเสร็จสิ้น ตัวอย่างเช่น,

   Connection: close

ในการร้องขอหรือฟิลด์ส่วนหัวการตอบสนองบ่งชี้ว่าการเชื่อมต่อไม่ควรถูกพิจารณาว่าเป็น 'ถาวร' (ส่วน 8.1)
หลังจากการร้องขอ / ตอบกลับปัจจุบันเสร็จสมบูรณ์

แอ็พพลิเคชัน HTTP / 1.1 ที่ไม่รองรับการเชื่อมต่อแบบคงที่จะต้องมีตัวเลือกการเชื่อมต่อ "ปิด" ในทุกข้อความ


3
IMO แปลก ๆ ทำไมต้องบอกว่าการเชื่อมต่อจะถูกปิดหากเซิร์ฟเวอร์สามารถปิดได้ ลูกค้าไม่ควรเพิ่งเห็นว่าการเชื่อมต่อถูกปิดโดยเซิร์ฟเวอร์ ความคิดใด ๆ ที่เป็นจุดสำคัญในส่วนหัวนี้? ฉันไม่เห็นคุณค่าใด ๆ ที่นี่
Pavel P

1
@Pavel เว็บแอปพลิเคชันมีส่วนหัว "Connection: close" http ในการตอบกลับในกรณีที่ต้องการแจ้งให้ load balancer ส่วนหน้าเพื่อปิดการเชื่อมต่อแบบ keep alive หากกล่อง load balancer ใช้งานอยู่
เพรา

1
@BasilA เพื่อให้ load balancer ปิดการเชื่อมต่อกับเซิร์ฟเวอร์หรือลูกค้า? ตัวโหลดบาลานซ์ของ IMO จะเห็นว่าการเชื่อมต่อถูกปิดโดยเซิร์ฟเวอร์และจะรู้ได้โดยไม่ต้องอ่านส่วนหัวใด ๆ กลับเป็นจริง: เซิร์ฟเวอร์สามารถปิดการเชื่อมต่อโดยไม่มีConnection: closeส่วนหัว
Pavel P

@Pavel loadbalancer มักจะได้รับการเชื่อมต่อหลายครั้งจากไคลเอนต์หลายตัวและใช้การเชื่อมต่อเดียวกันกับแบ็กเอนด์โดยใช้มัลติเพล็กซ์ผ่านการเชื่อมต่อแบบ keep-alive เมื่อแบ็กเอนด์บางส่วนอาจไม่ต้องการเป็นส่วนหนึ่งของมัลติเพล็กซ์นี้การตอบสนอง http แบ็กเอนด์ควรมี "การเชื่อมต่อ: ปิด" เพื่อแจ้งให้โหลดบาลานเซอร์เพื่อปิดการเชื่อมต่อและหยุดมัลติเพล็กซ์ รายละเอียดนี้ได้อธิบายไว้ในคู่มือการสร้างสมดุล AWS (เลื่อนลงไปที่ 'การเชื่อมต่อ HTTP') docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A

2
@BasilA ดูเหมือนว่าคุณพูดถูก น่าสนใจ ฟิลด์ส่วนหัวการเชื่อมต่อทั่วไปอนุญาตให้ผู้ส่งระบุตัวเลือกที่ต้องการสำหรับการเชื่อมต่อนั้นและไม่ต้องสื่อสารโดยพร็อกซีผ่านการเชื่อมต่อเพิ่มเติม
Daniel F
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.