「Webを支える技術」を読んで 〜HTTPの基本〜
こんにちは。
世間はGWですが、人権のないぼくにそんなものはありませんww
ここ最近滞っていたアウトプットを一気にしたいと思います。
あと、メンバーの小ネタも別記事で書いていこうかなと.....wwww
では、いきまぁっぁあぁぁす!!!!
前回は「URI」のお話でした。
今回からはwebを支える技術の3本柱の1つ、「HTTP」についてまとめます。
HTTPの基本
ここで1冊目の「プロになるためのWeb技術入門」をおさらいすると、
TCP/IPは郵便屋さんの役割やったね。
情報をパケットという単位に分けて送受信しているんやった。
ここら辺の話をもうちょっと詳しくすると、インターネットのネットワークプロトコルは階層型になってるそうな。
んで、その階層ごとに担当するプロトコルがある。
どういうことかと言うと
・アプリケーション層
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
・インターネット層
→ IP
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
・ネットワークインターフェース層
→ イーサネット
IPが担当するのは下から2番目の「インターネット層」。
ここでは、パケットという単位に分割してデータを実際にやりとりするんや。
ちなみにこいつは「データを送り出すだけ」しかやらないらしいwww
そしてTCP 。
こいつはその上の「トランスポート層」を担当。
ここでは、IPが送り出したデータをTCPが転送する。
TCPでは接続先の相手に対してコネクションを張る。
このコネクションを使ってデータの抜け漏れをチェックしているんや。
んで、接続したコネクションで転送するデータが、どのアプリケーションに渡るかを決定するのがポート番号 。
ちなみにHTTPは80番やったね。
ここまでまとめると、
①インターネット層でIPがデータをトランスポート層に送り出す、
②トランスポート層に渡ってきたデータを、TCPがポート番号で指定されたアプリケーションに転送する
こうやね。
HTTPの仕組み
基本的な仕組みは、「クライアント/サーバ」。
クライアントが出したリクエストをサーバで処理してレスポンスを返すというもの 。
この時、クライアントがやっているのは、
・リクエストメッセージの構築
・リクエストメッセージの送信
・(レスポンスが返るまでの待機)
・レスポンスメッセージの受信
・レスポンスメッセージの解析
・クライアントの目的を達成するために必要な処理
めっちゃ色々やっとるやんw
んで、同じくサーバがやっているのは、
・(リクエストの待機)
・リクエストメッセージの受信
・リクエストメッセージの解析
・適切なアプリケーションプログラムへの処理の委譲
・アプリケーションプログラムから結果を取得
・レスポンスメッセージの構築
・レスポンスメッセージの送信
HTTPの性質
HTTPの重要な性質の「ステートフル性」。
Cookieとかセッション状態とか出てきたけどもうちょっと詳しく。
ハンバーガーショップの例。
・ステートフルなやりとり
店員:「いらっしゃいませ。ご注文は?」
マサ:「セブバーガーセットで。」
店員:「サイドメニューは?」
マサ:「ポテト」
店員:「ドリンクは?」
〜〜〜〜省略〜〜〜〜
店員:「以上でよろしいですか?」
マサ:「はい。」
店員:「かしこまりました。」
.....うん、普通やねwww
ぼくらの日常会話はステートフルな会話ってことやな。
んじゃ、ステートレスなやりとりとは?
・ステートレスなやりとり
店員:「いらっしゃいませ。ご注文は?」
マサ:「セブバーガーセットで。」
店員:「サイドメニューは?」
マサ:「セブバーガーセットをポテトで。」
店員:「ドリンクは?」
マサ:「セブバーガーセットをポテトとコーラで。」
〜〜〜〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜〜〜
!?、マサがめんどくさい&ラリってるwwww
なるほど、ステートレスなやりとりってのは、毎回全ての注文を繰り返さないといけないわけやな。
一方のステートフルなやりとりでは、店員が毎回の注文を覚えているんやね。
このやりとりはweb上だと、クライアント(マサ)/サーバ(店員)になる。
一見ステートフルなやりとりの方がイケてるように見えるが、実はそうでないらしい。
ステートフルの欠点は、クライアントが増えるにしたがって、サーバが毎回のリクエストを覚えることが難しくなってくる。
ステートレスはこの点を解消している。
最終的なリクエストは、「セブバーガーセットのポテトとコーラ」。
それまでのやりとりをサーバが忘れていても、リクエストメッセージにこれがあれば、サーバはちゃんと認識してくれるってわけやね。
けど、ステートレスにも欠点がある。
それは、いちいちリクエストを送らなければならないので
「送信するデータが多くなる」。
これはパフォーマンス低下につながる。
まとめると、
ステートレスなアーキテクチャはスケーラビティの面でめっちゃ優秀だけど、パフォーマンス低下の欠点もある。
ってことやな。
次回は「HTTPのメソッド」について。
ではでは、今日はこの辺で。