Your Search Results

    Protocol upgrade mechanism

    The HTTP protocol provides a special mechanism allowing an already established connection to a new, incompatible, protocol. This mechanism is always client initiated, and the server may accept or refuse the switch to the new protocol.


    When the client wants to upgrade to a new protocol, it sends a normal request to the server (being a GET, POST or any other request type) and add the Upgrade: header followed by the protocol it wants to upgrade too. It can specify several of them, in order of preference.

    The server may either refuse the upgrade — in this case it merely ignores the Upgrade: header and send back a regular response (200 OK if it can serve the requested resource, a 30x status code if it wants to perform a redirect, a 40x or 50x one if it can't serve the requested resource) — or accept the upgrade. In this case it sends back a 101 Switching Protocols along with an Upgrade header containing the protocol chosen.

    Right after sending the 101 status code, an eventual handshake for the new protocol happens, if this one requires one, then the server send the answer requested for the previous request, following the new protocol rules.

    The Upgrade: header


    The 101 status code


    Common usages of this mechanism

    Upgrading to an Websocket connection

    Upgrading to HTTP over TLS


    Document Tags and Contributors

    Contributors to this page: Sheppy, teoli
    Last updated by: Sheppy,