この記事を読んでわかること
- HTTPとは何か。
- HTTPの特徴であるステートレス性とはどういうものか。
背景
Web業界に入ってから数ヶ月経ち、プログラミングのこともまだまだですが、そもそもwebの知識が乏しいと感じていたので、 今日は、HTTPについて簡単にまとめてみました。
参考:
HTTPとは
HTTP(Hyper Text Transfer Protocol)はweb上でやり取りするリソースの表現を、クライアントとサーバの間でやり取りするためのTCP/IPをベースとしたプロトコル。
と言われても、なんのこっちゃわかりません。 こういうわからない用語を調べて、さらにわからない用語が出た時は、さらにその用語を調べていくしかありません。。。 ここで出てきたよくわからない言葉、
を先に説明します。
リソース
リソースとは、web上のありとあらゆる情報。
例えば、
- 東京の天気予報
- ボディビルダーの写真
- コーポレートサイトのトップページ
など。
特に、あるリソースを他のリソースと区別して指し示すときに使う名前をURIと呼びます。
- https://weather.yahoo.co.jp/weather/13/4410.html
- https://www.google.com/search?q=%E3%83%9C%E3%83%87%E3%82%A3%E3%83%93%E3%83%AB&hl=ja&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjb_7qKlJvlAhVjFqYKHdnpAZ8Q_AUIEigB&biw=1680&bih=939
- https://ja.siva-s.com/
クライアントとサーバ
クライアント(webブラウザ)が、情報を提供するサーバ(webサーバ)に接続し、各種のリクエストを出して、レスポンスを受け取る。 サーバでの処理に時間がかかる場合でも、リクエストを出したクライアントはレスポンスが返るまで待機する。
プロトコル
プロトコルとは、通信をする上での約束事
TCP/IP
TCP/IPとは、TCP(Transmission Control Protocol)とIP(Internet Protocol)は、インターネットの基盤を構成する重要なネットワークプロトコル。 HTMLやXMLなどのハイパーテキストだけでなく、静止画、音声、動画、Javascriptプログラム、PDFや各種オフィスドキュメントなど、 コンピュータで扱えるデータであればなんでも転送できる。
IPは、インターネット層でデータを実際にやり取りする部分を担当している。 指定したIPアドレスを送り先として、パケット単位でデータをやり取りして通信する。しかし、多数のルータを経由して最終的な送り先まで届くかは保証しない。
TCPは、IPが保証しなかったデータの転送を保証するトランスポート層に相当する。
で、ここまでを踏まえて改めて先ほどの説明を言い換えると、
HTTP(Hyper Text Transfer Protocol)はweb上のありとあらゆる情報を、クライアントとサーバの間でやり取りするためのTCP/IPをベースとした通信の約束事。
(あまり変わってない笑)
HTTPのステートレス性
次にHTTPの特徴であるステートレス性ついて触れてみたいと思います。
ステートレス性とは、サーバがクライアントのアプリケーション状態を保存しない制約のことです。 ステートレスとは、逆にステートフルという言葉がありますが、両者の違いについて日常でよくあるやりとりを例に挙げて、説明します。
Aをクライアント、Bをサーバだと思ってください。
ステートフルなやりとり
A「筋トレを教えてください!!」
B「どうして筋トレを教えて欲しいの?」
A「筋肉を大きくしたいんです!!」
B「どこの筋肉を大きくしたいの??」
A「足の筋肉を大きくしたいんです!!」
B「じゃあスクワットやろうか(^∀^)ᕗ」
A「はい!!」
ステートレスなやりとり
A「筋トレを教えてください!!」
B「どうして筋トレを教えて欲しいの?」
A「筋肉を大きくしたいので、筋トレを教えてください!!」
B「どこの筋肉を大きくしたいの??」
A「足の筋肉を大きくしたいので、筋トレを教えてください!!」
B「じゃあスクワットやろうか(^∀^)ᕗ」
A「はい!!」
このように、ステートフルなやりとりはそれまでのやりとりをずっと覚えていることを前提に会話をしています。 逆にステートレスなやりとりは、記憶することができないので、都度「筋トレを教えてください!!」を言わないと教えてくれません笑笑
側から見たら、ステートフルなやりとりの方が簡潔で良いのではと思いますが、欠点があります。
それは、サーバがクライアントのアプリケーションの状態を覚えることは、クライアントの数が増えるにしたがい難しくなるからです。
不特定多数のクライアントを相手にする場合、サーバ間でデータを同期しなければいけませんが、それが100台となるととても負荷のかかることです。 なので、ステートフルでは、サーバの数を増やしづらいのです。
その点ステートレスは、アプリケーションの状態を覚える必要がないため、サーバ側のシステムは単純になり、拡張するときにはただサーバを増設するだけで済んでしまうのです。
このように、プロトコルをシンプルに保つことで、PCだけでなく様々なデバイス上でHTTPは使われています。
最後に
本の数10ページについてまとめましたが、まだまだ浅い記事しか書けないなと思いました。 ただ、続けることが大切なので自分のできる範囲でまずはやっていきたいと思います。