Obsah

    Odpověď serveru 101 Switching Protocols

    HTTP status kód 101 (Switching Protocols)

    HTTP status kód 101 se používá k informování klienta, že server akceptuje jeho požadavek na změnu komunikačního protokolu. Tento kód hraje klíčovou roli při navazování WebSocket spojení a v jiných situacích, kde je vyžadováno přepnutí protokolu.

    101 - Switching Protocols

    1. Popis status kódu 101

    1.1. Význam status kódu

    Status kód 101 indikuje, že server přijal žádost o přepnutí protokolu a začíná proces této změny. Klient může očekávat, že od tohoto okamžiku budou využívány nové protokoly pro další komunikaci.

    1.2. Kdy se používá kód 101

    Kód 101 se často používá v následujících situacích:

    • Při navazování WebSocket spojení.
    • Při přechodu na nové verze protokolů, například HTTP/2.
    • V aplikacích, které vyžadují rychlou obousměrnou komunikaci.

    1.3. Principy práce při přepínání protokolů

    Při přepínání protokolů server a klient vymění potřebné hlavičky a potvrzení, čímž se zajišťuje, že obě strany jsou připraveny na nová pravidla komunikace. Tento proces zahrnuje následující kroky:

    1. Klient odešle požadavek na přepnutí protokolu s odpovídajícími hlavičkami.
    2. Server zpracovává tento požadavek a rozhoduje, zda může přepnutí akceptovat.
    3. Server odešle odpověď s kódem 101, pokud je přepnutí schváleno.
    4. Obě strany začnou používat nový protokol.

    2. Praktické příklady použití kódu 101

    2.1. Navázání WebSocket spojení

    2.1.1. Příklad požadavku na přepnutí protokolu

    Klient může poslat následující požadavek pro navázání WebSocket spojení:

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

    2.1.2. Zpracování odpovědi od serveru

    Server odpoví na tento požadavek takto:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: dGhlIHNhbXBsZSBub25jZQ==
    

    2.2. Použití kódu 101 v protokolech, jako je HTTP/2

    2.2.1. Příklad přechodu z HTTP/1.1 na HTTP/2

    Při přechodu mezi těmito protokoly může klient odeslat:

    GET / HTTP/1.1
    Host: example.com
    Upgrade: h2c
    Connection: Upgrade
    

    Server pak může odpovědět s kódem 101, pokud je přepnutí povoleno.

    2.3. Příklady z reálných aplikací a knihoven

    WebSocket knihovny, jako je Socket.IO nebo WS pro Node.js, implementují přepínání protokolů automaticky, což usnadňuje práci vývojářům.

    3. Jak opravit problémy s kódem 101 na různých programovacích jazycích

    3.1. JavaScript (Node.js)

    3.1.1. Příklad kódu pro navázání WebSocket spojení

    Následující kód ukazuje, jak navázat WebSocket spojení:

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

    3.1.2. Jak zpracovávat chyby při přepínání protokolů

    Je důležité přidat obsluhu chyb:

    ws.on('error', function error(err) {
        console.error('Connection error:', err);
    });
    

    3.2. Python (s použitím knihovny Flask)

    3.2.1. Příklad implementace WebSocket s použitím Flask-SocketIO

    Příklad kódu pro nastavení WebSocket serveru:

    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. Zpracování chyb a ladění

    Pro zpracování chyb můžete použít dekorátor:

    @socketio.on_error()
    def handle_error(e):
        print(f'Error occurred: {e}')
    

    3.3. Java (s použitím Spring)

    3.3.1. Příklad implementace WebSocket pomocí Spring

    Ukázka kódu pro nastavení WebSocket serveru ve Springu:

    import org.springframework.web.socket.config.annotation.EnableWebSocket;
    import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
    import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
    
    @EnableWebSocket
    public class WebSocketConfig implements WebSocketConfigurer {
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(new MyWebSocketHandler(), "/chat");
        }
    }
    

    3.3.2. Jak správně nastavit server pro podporu kódu 101

    Je důležité zajistit, aby server byl správně nakonfigurován pro zpracování WebSocket požadavků a správné hlavičky.

    4. Časté chyby a jejich řešení

    4.1. Nesprávný hlavička Upgrade

    Pokud je hlavička Upgrade nesprávně nastavena, server může odmítnout požadavek na přepnutí protokolu. Zkontrolujte, zda jsou hlavičky správně formulovány.

    4.2. Nedostatek podpory protokolu na serveru

    Pokud server nepodporuje nový protokol, kód 101 nebude moci být vrácen. Ověřte, zda server má potřebnou konfiguraci.

    4.3. Chyby v klientském kódu při odesílání požadavku

    Při odesílání požadavku může dojít k chybám, jako je nesprávná URL nebo nesprávné hlavičky. Zkontrolujte všechny části klientského kódu.

    5. Nejlepší praktiky při práci s kódem 101

    5.1. Jak správně formulovat požadavky

    Vždy zajistěte, aby požadavek obsahoval správné hlavičky a formát. Používejte standardní názvy a hodnoty pro hlavičky Upgrade a Connection.

    5.2. Doporučení pro zpracování odpovědí

    Odpovědi serveru by měly být pečlivě analyzovány. Zpracovávejte kód 101 a reagujte na něj vhodným způsobem.

    5.3. Strategie ladění a monitorování spojení

    Implementujte logování a monitorování pro snadnou identifikaci problémů. Udržujte přehled o stavech spojení a chybách.