Status Code 101
Switching Protocols
The server understands and is willing to comply with the client's request to switch protocols.
Category
InformationalSpec URL
101 of RFC 9110Popularity
uncommon
Recommended
Yes
Deprecated
No
Common Use Case
WebSocket upgrade requests
Notes
Mainly used for WebSocket and HTTP/2 upgrades.
RFC Reference
Description
The server understands and is willing to comply with the client's request to switch protocols.
A typical server response for a 101 Switching Protocols status code looks like:
HTTP/1.1 101 Switching Protocols Date: Sun, 22 Mar 2026 12:00:00 GMT Server: httperrors.com
In practical HTTP conversations, informational responses are about pacing and negotiation. They tell the client that the conversation is still in progress and that a more complete answer is expected later.
Historically, HTTP 101 Switching Protocols should be read in light of RFC 9110. Standards text tends to focus on precise semantics, while production systems care about retries, user experience, dashboards, proxies, browsers, and documentation. Good engineering joins those two views instead of choosing one over the other. When teams treat a status code as both a protocol message and a product decision, they produce APIs and pages that are easier to operate and easier to trust.
A practical reading of this entry is that the server is communicating something very specific: The server understands and is willing to comply with the client's request to switch protocols. In day-to-day work, that meaning should be reflected across controllers, reverse proxies, API gateways, and frontend assumptions. If the server sends HTTP 101, but the response body, cache headers, or application behavior tell a different story, client code starts compensating for inconsistency and the whole stack becomes harder to reason about.
The normative anchor here is RFC 9110, with a direct reference at https://datatracker.ietf.org/doc/html/rfc9110#section-15.2.2. That RFC context matters because the exact words in the standard often settle edge cases around caching, retries, authentication, payload requirements, or intermediary behavior.
Implementations should emit this response only when both sides of the connection can benefit from the extra protocol step. If it does not improve safety or latency, it usually adds complexity without enough payoff.
In implementation terms, HTTP 101 Switching Protocols should appear at a deliberate decision point in your request handling code. Avoid choosing it late as a cosmetic label after the rest of the response is already formed. Most clients should simply continue the intended flow once the surrounding protocol expectations are met. If your logs show this status frequently, the surrounding context should make it obvious whether the response reflects normal traffic or a design problem.
For HTTP 101 Switching Protocols, the short description is only the starting point. The more useful interpretation is how a real client should react after seeing this response in a live request cycle. The server understands and is willing to comply with the client's request to switch protocols.
A useful way to compare HTTP 101 is against final response codes. Informational messages should not be mistaken for the end of the conversation. They are protocol cues, not complete business outcomes. This is one reason protocol precision pays off over time: the better your status taxonomy, the easier it becomes to debug client behavior, build metrics, and explain edge cases to other engineers.
From an operational perspective, HTTP 101 should be visible in logs, metrics, and alerts with enough surrounding metadata to explain why it happened. Popularity for this entry is listed as uncommon, and that should influence how much defensive documentation and monitoring you add. Because the code is uncommon, it is worth distinguishing healthy uses from suspicious spikes so routine traffic is not mistaken for a regression.
Search crawlers usually do not index informational responses directly because these responses are transitional rather than final. The SEO consequence is indirect: if a crawler receives an informational code but never reaches a stable final response, indexing quality suffers. For HTTP 101, the operational takeaway is that status correctness supports SEO indirectly by making crawl behavior more predictable. Pages, APIs, and edge routes should return this code only when its meaning is exactly true.
Since this code is marked as recommended, teams can confidently use it when the semantics are an exact match. The key word is exact. Recommendation does not mean convenience; it means the code is a strong standard choice when the surrounding conditions line up.
Because this code is not deprecated, it remains part of the active vocabulary that modern web systems can use. Even so, correctness still depends on discipline. A valid status code becomes harmful if teams reuse it as shorthand for several unrelated situations.
The supporting note for this entry is also important: Mainly used for WebSocket and HTTP/2 upgrades. This often captures the gap between the formal specification and day-to-day engineering practice.
The best way to think about HTTP 101 Switching Protocols is not as trivia, but as a promise. It tells the caller what happened, what should happen next, and how much confidence the client can place in the current response. The example recorded for this entry is WebSocket upgrade requests, and the note says Mainly used for WebSocket and HTTP/2 upgrades.. Together with the specification link at https://datatracker.ietf.org/doc/html/rfc9110#section-15.2.2, those details give implementers enough context to use the code intentionally rather than mechanically. That is the standard worth aiming for in production systems.
Other HTTP status codes in the Informational category
The initial part of a request has been received and has not yet been rejected by the server.
Used with Expect: 100-continue header
The server has received and is processing the request, but no response is available yet.
WebDAV extended operations
Used to return some response headers before final HTTP message.
Link preload headers