サーバーとクライアントという言葉がよく出てきますがイマイチ掴みづらい言葉なので厳密さは置いておいてイメージをつかむための説明をしたいとおもいます。
## サーバーはでかいパソコンのことじゃない
![Image from Gyazo](https://i.gyazo.com/eddae86e62aa221761b7c527067d673a.png)
サーバーってこういうのでしょ?
![Image from Gyazo](https://i.gyazo.com/0fc7f9f77a0cd1fa98a01b145e69082e.jpg)
で、クライアントは・・・普通のパソコン?
・・・ではありません。
## サーバーとクライアントは役割
サーバーやクライアントというのは特定の機械のことではなく**役割の名前**です。
「**親**と**子**」とか「**先生**と**生徒**」みたいな感じです。
どちらも常に特定の人物を指すわけではなく、文脈によってどちらにもなりえますよね?
「自分から見てAさんは**親**だが、おばあちゃんから見ればAさんは**子**になる」のように。
**サーバー**と**クライアント**もそういった役割の名前です。
大きいコンピューターがサーバーの役割をすることもあれば別の文脈ではクライアントの役割もします。また、自分のパソコンがサーバーの役割をすることもあればクライアントの役割をすることもあります。
## イメージ
[![Image from Gyazo](https://i.gyazo.com/160b8780d4896e409c8562ee954380b8.png)](https://gyazo.com/160b8780d4896e409c8562ee954380b8)
サーバーは店員さんやホテルのコンシェルジュみたいなイメージ。何らかのサービスを提供してくれる。クライアントはお客さん(大抵複数人いる)ってイメージです。
(あくまで僕の脳内イメージなので他の人は別かもです)
## インターネット(HTTP)では?
例えばみんなが普段使っているWebページはHTTPというプロトコル(通信上の決まり)でサーバーとクライアントがやりとりをしています。その場合のサーバーとクライアントは具体的には何になるのでしょうか?
[![Image from Gyazo](https://i.gyazo.com/28225ebad23e7e77a6b25acbe6084807.png)](https://gyazo.com/28225ebad23e7e77a6b25acbe6084807)
サーバーがnginx(というソフトウェア)で、クライアントがブラウザ(例えばGoogle Chrome)です。
2021年現在、HTTPサーバーのシェア1位がnginx(エンジンエックス)で、HTTPクライアントのシェア1位がGoogle Chromeなので代表して書いていますが、それぞれ他にHTTPサーバーソフト、HTTPクライアントソフトはたくさんあります。
こういう場合、文脈を明確にするために、**HTTPサーバー**・**HTTPクライアント**と言います。
ブログ