おれ、エンジニアになるよ。

エンジニア志望の大学生がISUCON7出場を目指す成長日記

「Webを支える技術」を読んで 〜HTTPの基本〜

こんにちは。

世間はGWですが、人権のないぼくにそんなものはありませんww

ここ最近滞っていたアウトプットを一気にしたいと思います。

あと、メンバーの小ネタも別記事で書いていこうかなと.....wwww

 

 

では、いきまぁっぁあぁぁす!!!!

 

 

 

前回は「URI」のお話でした。

今回からはwebを支える技術の3本柱の1つ、「HTTP」についてまとめます。

 

 

HTTPの基本

 

 

「HTTPはTCP/IPをベースとしたプロトコル

 

ここで1冊目の「プロになるためのWeb技術入門」をおさらいすると、

TCP/IPは郵便屋さんの役割やったね。

情報をパケットという単位に分けて送受信しているんやった。

 

ここら辺の話をもうちょっと詳しくすると、インターネットのネットワークプロトコルは階層型になってるそうな。

んで、その階層ごとに担当するプロトコルがある。

 

どういうことかと言うと

 

・アプリケーション層

→ HTTP、NTP、SSHSMTPDNS

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

トランスポート層

→ UDPTCP

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

・インターネット層

→ IP

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

・ネットワークインターフェース層

→ イーサネット

 

IPが担当するのは下から2番目の「インターネット層」。

ここでは、パケットという単位に分割してデータを実際にやりとりするんや。 

 ちなみにこいつは「データを送り出すだけ」しかやらないらしいwww

 

そしてTCP 。

こいつはその上の「トランスポート層」を担当。

ここでは、IPが送り出したデータをTCPが転送する。

 

TCPでは接続先の相手に対してコネクションを張る。

このコネクションを使ってデータの抜け漏れをチェックしているんや。

んで、接続したコネクションで転送するデータが、どのアプリケーションに渡るかを決定するのがポート番号 。

ちなみにHTTPは80番やったね。

 

 

ここまでまとめると、

 

①インターネット層でIPがデータをトランスポート層に送り出す、

トランスポート層に渡ってきたデータを、TCPがポート番号で指定されたアプリケーションに転送する

 

こうやね。

 

 

HTTPの仕組み

 

基本的な仕組みは、「クライアント/サーバ」。

クライアントが出したリクエストをサーバで処理してレスポンスを返すというもの 。

 

この時、クライアントがやっているのは、

 

・リクエストメッセージの構築

・リクエストメッセージの送信

・(レスポンスが返るまでの待機)

・レスポンスメッセージの受信

・レスポンスメッセージの解析

・クライアントの目的を達成するために必要な処理

 

めっちゃ色々やっとるやんw

 

 

んで、同じくサーバがやっているのは、

 

・(リクエストの待機)

・リクエストメッセージの受信

・リクエストメッセージの解析

・適切なアプリケーションプログラムへの処理の委譲

・アプリケーションプログラムから結果を取得

・レスポンスメッセージの構築

・レスポンスメッセージの送信

 

 

 

HTTPの性質

 

HTTPの重要な性質の「ステートフル性」。

Cookieとかセッション状態とか出てきたけどもうちょっと詳しく。

 

ハンバーガーショップの例。

 

・ステートフルなやりとり

店員:「いらっしゃいませ。ご注文は?」

マサ:「セブバーガーセットで。」

店員:「サイドメニューは?」

マサ:「ポテト」

店員:「ドリンクは?」

〜〜〜〜省略〜〜〜〜

店員:「以上でよろしいですか?」

マサ:「はい。」

店員:「かしこまりました。」

 

.....うん、普通やねwww

ぼくらの日常会話はステートフルな会話ってことやな。

んじゃ、ステートレスなやりとりとは?

 

・ステートレスなやりとり

店員:「いらっしゃいませ。ご注文は?」

マサ:「セブバーガーセットで。」

店員:「サイドメニューは?」

マサ:「セブバーガーセットをポテトで。」

店員:「ドリンクは?」

マサ:「セブバーガーセットをポテトとコーラで。」

 〜〜〜〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜〜〜

 

!?、マサがめんどくさい&ラリってるwwww

なるほど、ステートレスなやりとりってのは、毎回全ての注文を繰り返さないといけないわけやな。

一方のステートフルなやりとりでは、店員が毎回の注文を覚えているんやね。

 

このやりとりはweb上だと、クライアント(マサ)/サーバ(店員)になる。

一見ステートフルなやりとりの方がイケてるように見えるが、実はそうでないらしい。

 

ステートフルの欠点は、クライアントが増えるにしたがって、サーバが毎回のリクエストを覚えることが難しくなってくる。

 

ステートレスはこの点を解消している。

最終的なリクエストは、「セブバーガーセットのポテトとコーラ」

それまでのやりとりをサーバが忘れていても、リクエストメッセージにこれがあれば、サーバはちゃんと認識してくれるってわけやね。

 

けど、ステートレスにも欠点がある。

それは、いちいちリクエストを送らなければならないので

「送信するデータが多くなる」。

 

これはパフォーマンス低下につながる。

 

まとめると、

 

ステートレスなアーキテクチャはスケーラビティの面でめっちゃ優秀だけど、パフォーマンス低下の欠点もある。

 

ってことやな。

 

次回は「HTTPのメソッド」について。

ではでは、今日はこの辺で。