公開:

HTTPステータスコードの「101 Switching Protocols」とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


HTTPステータスコードの「101 Switching Protocols」とは

「101 Switching Protocols」はクライアントからのプロトコル切り替えリクエストが受け入れられたことを示すステータスコードです。このステータスコードはHTTPプロトコルからWebSocketプロトコルへの切り替えなどに使用されます。

「101 Switching Protocols」はHTTPの拡張メカニズムであるUpgrade headerを使用して、クライアントがサーバーにプロトコルのアップグレードを要求した場合に返されるステータスコードになります。サーバーがクライアントからのアップグレードリクエストを受け入れた場合、このステータスコードを返し、新しいプロトコルへの切り替えが行われるのです。

一般的にはWebSocketを使用したリアルタイム通信を実現する際に、HTTPからWebSocketへのプロトコル切り替えを行うために「101 Switching Protocols」が使用されています。クライアントがWebSocketを使用したい場合、まずHTTPリクエストを送信し、Upgrade headerでWebSocketへのアップグレードをリクエストします。

サーバーがWebSocketをサポートしており、アップグレードリクエストを受け入れる場合、「101 Switching Protocols」ステータスコードを返します。これにより、HTTPコネクションはWebSocketプロトコルにアップグレードされ、双方向の通信が可能になるわけです。

「101 Switching Protocols」はプロトコルのアップグレードを行うための重要なステータスコードであり、特にWebSocketを使用したリアルタイム通信を実現する際に欠かせない役割を果たしています。HTTPの拡張性を示す良い例であると言えるでしょう。

「101 Switching Protocols」が返される条件

「101 Switching Protocols」が返される条件」に関して、以下3つを簡単に解説していきます。

  • クライアントからのアップグレードリクエストの存在
  • サーバーがリクエストされたプロトコルをサポートしていること
  • サーバーがアップグレードリクエストを受け入れること

クライアントからのアップグレードリクエストの存在

「101 Switching Protocols」が返されるためにはまずクライアントからのアップグレードリクエストが存在する必要があります。クライアントは通常のHTTPリクエストを送信する際に、Upgrade headerを含めることでプロトコルのアップグレードをリクエストします。

例えば、WebSocketへのアップグレードを要求する場合、クライアントは以下のようなHTTPリクエストを送信します。このリクエストにはUpgrade headerとConnection headerが含まれており、これらのヘッダーがプロトコルのアップグレードをリクエストしていることを示しているのです。

GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade

サーバーがリクエストされたプロトコルをサポートしていること

クライアントからのアップグレードリクエストを受け取ったサーバーはリクエストされたプロトコルをサポートしている必要があります。サーバーがリクエストされたプロトコルを理解し、そのプロトコルへのアップグレードが可能である場合にのみ、「101 Switching Protocols」ステータスコードが返されます。

例えば、クライアントがWebSocketへのアップグレードをリクエストした場合、サーバーはWebSocketプロトコルを理解し、サポートしている必要があります。サーバーがWebSocketをサポートしていない場合、アップグレードリクエストは拒否され、「101 Switching Protocols」ステータスコードは返されません。

サーバーはリクエストされたプロトコルをサポートしているかどうかを判断し、サポートしている場合にのみアップグレードリクエストを受け入れるようになっています。これにより、サーバーは未知のプロトコルへのアップグレードを防ぎ、セキュリティを確保することができるのです。

サーバーがアップグレードリクエストを受け入れること

サーバーがリクエストされたプロトコルをサポートしている場合でも、必ずしもアップグレードリクエストを受け入れるとは限りません。サーバーはアップグレードリクエストを受け入れるかどうかを判断する権限を持っています。

サーバーがアップグレードリクエストを受け入れる場合、「101 Switching Protocols」ステータスコードを返し、新しいプロトコルへの切り替えが行われます。一方、サーバーがアップグレードリクエストを拒否する場合、「101 Switching Protocols」ステータスコードは返されず、通常のHTTPレスポンスが返されることになります。

サーバーがアップグレードリクエストを受け入れるかどうかはサーバーの設定や状態によって異なります。例えば、サーバーがアップグレードリクエストを受け入れるための十分なリソースを持っていない場合や、セキュリティ上の理由からアップグレードを拒否する場合などが考えられます。

「101 Switching Protocols」の応答フォーマット

「101 Switching Protocols」の応答フォーマット」に関して、以下3つを簡単に解説していきます。

  • ステータスライン
  • Upgradeヘッダー
  • Connectionヘッダー

ステータスライン

「101 Switching Protocols」の応答フォーマットにおいて、最初に現れるのはステータスラインです。ステータスラインはHTTPバージョン、ステータスコード、および理由フレーズで構成されています。

「101 Switching Protocols」の場合、ステータスラインは以下のようになります。このステータスラインはHTTPバージョンが1.1であり、ステータスコードが101、理由フレーズが「Switching Protocols」であることを示しています。

HTTP/1.1 101 Switching Protocols

Upgradeヘッダー

「101 Switching Protocols」応答にはUpgradeヘッダーが含まれます。Upgradeヘッダーはアップグレードされるプロトコルを示すために使用されます。

例えば、WebSocketへのアップグレードが行われる場合、Upgradeヘッダーは以下のようになります。このヘッダーはアップグレードされるプロトコルがWebSocketであることを示しているのです。

Upgrade: websocket

Upgradeヘッダーはクライアントからのアップグレードリクエストに対する応答として使用されます。サーバーはクライアントがリクエストしたプロトコルをUpgradeヘッダーに含めることで、そのプロトコルへのアップグレードが行われることを確認するわけです。

Connectionヘッダー

「101 Switching Protocols」応答にはConnectionヘッダーも含まれます。Connectionヘッダーはアップグレード後の接続の取り扱いを示すために使用されます。

通常、「101 Switching Protocols」応答のConnectionヘッダーには「Upgrade」という値が設定されます。これは現在の接続がアップグレードされることを示しています。

Connection: Upgrade

Connectionヘッダーはアップグレード後の接続が維持されるべきであることを示します。つまり、アップグレード後も同じTCP接続が使用され、新しいプロトコルでの通信が継続されることを意味しているのです。

「101 Switching Protocols」の使用例

「101 Switching Protocols」の使用例」に関して、以下3つを簡単に解説していきます。

  • WebSocketへのアップグレード
  • HTTP/2へのアップグレード
  • カスタムプロトコルへのアップグレード

WebSocketへのアップグレード

「101 Switching Protocols」の最も一般的な使用例はWebSocketへのアップグレードです。WebSocketはHTTPの上に構築された双方向通信プロトコルであり、リアルタイムなデータのやり取りを可能にします。

クライアントがWebSocketを使用したい場合、まずHTTPリクエストを送信し、Upgradeヘッダーでwebsocketを指定します。サーバーがWebSocketをサポートしており、アップグレードリクエストを受け入れる場合、「101 Switching Protocols」ステータスコードを返し、WebSocketプロトコルへの切り替えが行われるのです。

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

HTTP/2へのアップグレード

「101 Switching Protocols」はHTTP/2へのアップグレードにも使用されます。HTTP/2はHTTPの次世代バージョンであり、パフォーマンスの向上と機能の拡張を目的としています。

クライアントがHTTP/2を使用したい場合、まずHTTPリクエストを送信し、Upgradeヘッダーでh2cを指定します。サーバーがHTTP/2をサポートしており、アップグレードリクエストを受け入れる場合、「101 Switching Protocols」ステータスコードを返し、HTTP/2プロトコルへの切り替えが行われます。

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

ただし、HTTP/2へのアップグレードには「101 Switching Protocols」を使用する方法の他に、ALPNと呼ばれる拡張機能を使用する方法もあります。ALPNを使用する場合、「101 Switching Protocols」は使用されません。

カスタムプロトコルへのアップグレード

「101 Switching Protocols」はWebSocketやHTTP/2以外のカスタムプロトコルへのアップグレードにも使用できます。独自のプロトコルを定義し、そのプロトコルへのアップグレードを行うことが可能です。

カスタムプロトコルへのアップグレードを行う場合、クライアントはUpgradeヘッダーで独自のプロトコル名を指定します。サーバーがそのプロトコルをサポートしており、アップグレードリクエストを受け入れる場合、「101 Switching Protocols」ステータスコードを返し、カスタムプロトコルへの切り替えが行われるのです。

HTTP/1.1 101 Switching Protocols
Upgrade: my-custom-protocol
Connection: Upgrade

カスタムプロトコルへのアップグレードは特定のアプリケーションや環境において有用です。独自のプロトコルを定義することで、アプリケーションの要件に合わせた通信方式を実現することができます。

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「インターネット」に関するコラム一覧「インターネット」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。