DevToolPal
ไทย
1xx ข้อมูล

101 Switching Protocols

สลับโปรโตคอล

ความหมาย

เซิร์ฟเวอร์ตกลงสลับไปใช้โปรโตคอลที่ไคลเอนต์ขอใน header Upgrade ซึ่งส่วนใหญ่คือ WebSocket หลังการตอบกลับนี้ การเชื่อมต่อจะใช้โปรโตคอลใหม่

สาเหตุที่พบบ่อย

  • การ handshake ของ WebSocket สำเร็จ
  • ไคลเอนต์ขออัปเกรดเป็น h2c (HTTP/2 แบบไม่เข้ารหัส)
  • ยอมรับการอัปเกรดโปรโตคอลแบบกำหนดเอง

วิธีแก้ไข

สำหรับไคลเอนต์หรือผู้เยี่ยมชม

สำหรับ WebSocket รหัส 101 หมายถึงสำเร็จ หากคาดว่าจะได้ 101 แต่ได้ 200 หรือ 400 ให้ตรวจว่า URL ชี้ไปที่ endpoint ของ WebSocket และพร็อกซีส่งต่อ header Upgrade และ Connection

สำหรับผู้ดูแลเว็บไซต์หรือ API

เมื่ออยู่หลัง nginx หรือ load balancer ให้ส่งต่อ Upgrade และ Connection อย่างชัดเจน (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") และเพิ่มเวลา idle timeout สำหรับ socket ที่เชื่อมต่อนาน

ตัวอย่างการตอบกลับ

HTTP/1.1
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

ข้อกำหนด

RFC 9110 §15.2.2

คำถามที่พบบ่อย

› ทำไม WebSocket ของฉันคืน 400 แทน 101

header ของ handshake หายไปหรือถูกแก้ไข มักเกิดจากพร็อกซีที่ตัด Upgrade/Connection ทิ้ง หรือ Sec-WebSocket-Key หรือเวอร์ชันไม่ถูกต้อง

› HTTP/2 ใช้ 101 หรือไม่

เฉพาะการอัปเกรด h2c แบบไม่เข้ารหัสซึ่งพบได้น้อย เบราว์เซอร์เจรจา HTTP/2 ผ่าน TLS ALPN และตัว HTTP/2 เองไม่มีการตอบกลับ 101