101 Switching Protocols
HTTP response status code 101 Switching Protocols is an informational HTTP response returned by the server. It indicates that the HTTP session can continue and the server is switching to a new protocol. This response is sent when the client includes the HTTP header request field Upgrade, as well as the HTTP request header field Connection: upgrade
, which is a mandatory HTTP request header.
Usage
Clients that include the Upgrade request header field want the server to use a different protocol for the remainder of the HTTP session. Multiple HTTP protocols can be listed on a single line, comma-delimited, in order of descending preference. The HTTP protocol version is optional.
Connection: upgrade
Upgrade: protocol-name[/protocol-version]
The HTTP request will be made when there is a benefit to doing so, such as taking advantage of features offered by more recent versions of the HTTP protocol. Currently this upgrade is only supported by HTTP/1.1 and a client cannot force the server to change HTTP protocols. Rather, it is optional, and the server will return a 200 OK response if the Upgrade header request field was ignored.
Server-side request
Although the server cannot force a client to upgrade HTTP protocols, it can refuse HTTP requests if a client fails to meet its requirements. When a client makes a HTTP request using a HTTP protocol that the server does not support, the server may return the status code 426 Upgrade Required. Using the HTTP protocol as directed by the server, the client may have subsequent HTTP requests accepted and processed.
Examples
Upgrade from HTTP/1.1 to HTTP/2 or HTTP/3
Request
GET /index.html HTTP/1.1
Host: www.example.re
Connection: upgrade
Upgrade: HTTP/3, HTTP/2
Response
HTTP/1.1 101 Switching Protocols
Upgrade: HTTP/2
Connection: upgrade
Upgrade from HTTP/1.1 to use WebSockets
Request
GET /index.html HTTP/1.1
Host: www.example.re
Connection: upgrade
Upgrade: websocket
Response
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Code references
.NET
HttpStatusCode.SwitchingProtocols
Rust
http::StatusCode::SWITCHING_PROTOCOLS
Rails
:switching_protocols
Go
http.StatusSwitchingProtocols
Symfony
Response::HTTP_SWITCHING_PROTOCOLS
Python3.5+
http.HTTPStatus.SWITCHING_PROTOCOLS
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_SWITCHING_PROTOCOLS
Angular
@angular/common/http/HttpStatusCode.SwitchingProtocols
Takeaway
The 101 Switching Protocols informational response status code is sent by the server to inform the client that the HTTP protocol in the HTTP session is switching, as requested, and the new HTTP protocol is specified.