「HTTPはステートレスだからセッション管理が必要」を詳しく解説
2020.07.25 /
フロントエンドのみ(HTMLやCSS)の開発をしている場合はHTTPがステートレスであることや、セッション管理がなぜ必要か、といったことは気にする必要はないです。
ですがバックエンド側の開発も携わってくると、これらに対しての知識が必要になってきます。
特にログインが必要なWEBアプリケーションを開発する場合は、セッション管理は避けられない知識です。
ここでは
HTTPがステートレスってどういうこと?
セッション管理ってなんで行うの?
といった疑問を解決していきたいと思います。
ステートレスなHTTP
みなさんご存じのようにWebサイトやWebアプリケーションは、www(World Wid Web)上でHTTP(Hypertext Transfer Protocol)というプロトコルで情報のやりとりをしています。
プロトコルとはデータを相互にやりとりができるように、あらかじめ決められたルールです
Webサイトが表示される流れとしては、
ブラウザからWebサーバーへ処理要求(リクエスト)が送信され、Webサーバーからブラウザへ応答(レスポンス)を送信し、ブラウザがレスポンスを受信してページを表示するという流れです。
ブラウザとWebサーバーの間でHTTPは平文(私たちが読めるテキスト形式)でデータのやり取りが行われます。
そして本題の「HTTPはステートレス」についてですが、先に結論を言うと、
HTTPは状態を保持できない
ということです。
具体的な例を挙げると、ブラウザとWebサーバーは以下のような会話を繰り広げるということになります。
<ブラウザとサーバーの会話例>
ブラウザ:私はOffice54です(リクエスト)
サーバー:Office54さんですね(レスポンス)
ブラウザ:Pythonの本をください(リクエスト)
サーバー:Pythonの本ですね。それではあなたの名前を教えてください(レスポンス)
サーバーは数多くの人と会話を同時にしているので、ただのリクエストでは相手が誰なのかわかりません。
しかしリクエストは状態を保持できないので、以前に名前を言っていたとしてもその状態は保持されないのです。
そこで誰がリクエストを投げているのかをわかるようにするために、セッションという機能を使用するのです。
セッション管理で相手を特定
リクエストを投げてきた相手が誰なのか、覚えておくためにセッションを使用するというところまでは理解していただけたかと思います。
次にセッションを使って、どうやってユーザーを特定するのか説明します。
Webサーバーはブラウザからのリクエストを受けたタイミングでセッションIDを発行します。
その発行したセッションIDをレスポンスにくっつけて、Webサーバーはレスポンスをブラウザに送ります。
その後、ブラウザはWebサーバーにリクエストを送信するたびに、リクエストにセッションIDをくっつけて送信します。
Webサーバーは、
このリクエストに付いているセッションIDを確認することで誰からのリクエストなのかがわかる、
という仕組みになっています。
どのセッションIDがどのユーザーなのかWebサーバー上で管理しており、これがWebサーバーにおけるセッション管理です。
このWebサーバーが発行したセッションIDは、Cookie(クッキー)に保存されます。そしてCookieはブラウザに保存されます。
Cookie(クッキー)は、「名前=値」の形でブラウザ上に保存されるデータです。ブラウザがWebサーバーにリクエストを送信する際に、Cookieを含めて送信します。Cookieを受け取ったサーバとは異なるWebサーバーに対してはそのCookieは送らない。
まとめ
以下に大事なポイントをまとめておきます。
ステートレスなHTTPは状態を保持できない
状態の保持にセッションを使う
セッションはWebサーバーが発行する
セッションはCookieに保存され、ブラウザにCookieは保存される
上記ポイントを覚えて、アプリ作成に役立ててください。