Contents

    Server response 101 Switching Protocols

    คำอธิบายรหัสสถานะ 101

    รหัสสถานะ HTTP 101 (Switching Protocols) ถูกใช้เพื่อแจ้งให้ลูกค้าทราบว่าเซิร์ฟเวอร์ได้ตอบรับคำขอในการเปลี่ยนโปรโตคอลการสื่อสาร รหัสนี้มักถูกนำไปใช้ในสถานการณ์ที่ต้องการการเปลี่ยนโปรโตคอล เช่น การตั้งค่า WebSocket เชื่อมต่อและกรณีอื่น ๆ ที่เกี่ยวข้องกับการสื่อสารผ่านโปรโตคอลที่แตกต่างกัน

    101 - Switching Protocols

    1.1 ความหมายของรหัสสถานะ

    รหัส 101 เป็นสัญญาณว่าการสื่อสารระหว่างลูกค้าและเซิร์ฟเวอร์กำลังเปลี่ยนแปลงโปรโตคอล ซึ่งหมายความว่าเซิร์ฟเวอร์จะยอมรับการสื่อสารในรูปแบบใหม่ที่ลูกค้าได้ร้องขอ

    1.2 เมื่อใดที่จะใช้รหัส 101

    • เมื่อมีการตั้งค่า WebSocket เชื่อมต่อ
    • เมื่อมีการเปลี่ยนจาก HTTP/1.1 ไปยัง HTTP/2
    • ในการสื่อสารที่ต้องการรูปแบบการส่งข้อมูลใหม่

    1.3 หลักการทำงานเมื่อเปลี่ยนโปรโตคอล

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

    ตัวอย่างการใช้งานรหัส 101

    2.1 การตั้งค่า WebSocket เชื่อมต่อ

    2.1.1 ตัวอย่างคำขอการเปลี่ยนโปรโตคอล

    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    

    2.1.2 การจัดการการตอบกลับจากเซิร์ฟเวอร์

    เมื่อเซิร์ฟเวอร์ตอบกลับด้วยรหัส 101 ลูกค้าสามารถเริ่มสื่อสารผ่าน WebSocket ได้ทันที

    2.2 การใช้รหัส 101 ในโปรโตคอล เช่น HTTP/2

    2.2.1 ตัวอย่างการเปลี่ยนจาก HTTP/1.1 ไปยัง HTTP/2

    HTTP/1.1 101 Switching Protocols
    Upgrade: h2c
    Connection: Upgrade
    

    2.3 ตัวอย่างจากแอปพลิเคชันและไลบรารีจริง

    • การใช้ Socket.io ใน JavaScript
    • Flask-SocketIO ใน Python
    • Spring WebSocket ใน Java

    วิธีแก้ไขปัญหากับรหัส 101 ในภาษาการเขียนโปรแกรมต่าง ๆ

    3.1 JavaScript (Node.js)

    3.1.1 ตัวอย่างโค้ดสำหรับการตั้งค่า WebSocket เชื่อมต่อ

    const WebSocket = require('ws');
    const ws = new WebSocket('ws://example.com/chat');
    ws.on('open', function open() {
        console.log('Connection established');
    });
    

    3.1.2 วิธีการจัดการข้อผิดพลาดเมื่อเปลี่ยนโปรโตคอล

    ควรจัดการข้อผิดพลาดด้วยการฟังเหตุการณ์ 'error' ของ WebSocket

    3.2 Python (ใช้ไลบรารี Flask)

    3.2.1 ตัวอย่างการใช้งาน WebSocket ด้วย Flask-SocketIO

    from flask import Flask
    from flask_socketio import SocketIO
    
    app = Flask(__name__)
    socketio = SocketIO(app)
    
    @socketio.on('connect')
    def handle_connect():
        print('Client connected')
    

    3.2.2 การจัดการข้อผิดพลาดและการดีบัก

    ใช้ฟังก์ชันการจัดการข้อผิดพลาดเพื่อให้สามารถตรวจสอบสถานะการเชื่อมต่อได้

    3.3 Java (ใช้ Spring)

    3.3.1 ตัวอย่างการใช้งาน WebSocket ด้วย Spring

    @Configuration
    @EnableWebSocket
    public class WebSocketConfig implements WebSocketConfigurer {
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(new MyWebSocketHandler(), "/chat");
        }
    }
    

    3.3.2 วิธีการตั้งค่าเซิร์ฟเวอร์ให้รองรับรหัส 101

    ตรวจสอบว่ามีการเปิดใช้งานการเชื่อมต่อ WebSocket ในการตั้งค่าของเซิร์ฟเวอร์

    ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

    4.1 หัวข้อ Upgrade ไม่ถูกต้อง

    ควรตรวจสอบให้แน่ใจว่าหัวข้อ Upgrade ถูกตั้งค่าอย่างถูกต้องในคำขอ

    4.2 การขาดการสนับสนุนโปรโตคอลบนเซิร์ฟเวอร์

    ควรตรวจสอบความสามารถของเซิร์ฟเวอร์ในการรองรับโปรโตคอลที่ร้องขอ

    4.3 ข้อผิดพลาดในโค้ดลูกค้าเมื่อส่งคำขอ

    ต้องตรวจสอบโค้ดลูกค้าเพื่อให้แน่ใจว่าคำขอถูกส่งไปยังเซิร์ฟเวอร์อย่างถูกต้อง

    แนวทางปฏิบัติที่ดีที่สุดในการทำงานกับรหัส 101

    5.1 วิธีการสร้างคำขออย่างถูกต้อง

    ใช้โครงสร้างที่เหมาะสมและตรวจสอบให้แน่ใจว่าหัวข้อที่จำเป็นได้ถูกตั้งค่า

    5.2 คำแนะนำในการจัดการการตอบกลับ

    ต้องจัดการการตอบกลับจากเซิร์ฟเวอร์อย่างมีประสิทธิภาพเพื่อให้สามารถสื่อสารได้อย่างราบรื่น

    5.3 กลยุทธ์การดีบักและการตรวจสอบการเชื่อมต่อ

    ใช้เครื่องมือการดีบักเพื่อช่วยในการติดตามปัญหาที่เกิดขึ้นในขณะที่เชื่อมต่อ