こんにちわ。
本ブログの管理人のRRです。
プログラミング学習日記の時間です。
現在、プログラミングについて目下学習中のため、学んだことをアウトプットして記憶に定着させています。
3回目となる今回は、
Webアプリケーションとユーザーの間にある通信の仕組み
について解説します。
「どうやって私たちはWebページをPCやスマホで見ているのだろう?」をテーマに、
コンピュータ間の通信について、深掘りしたので、記録します。
注文と対応
コンピューター間の通信は、たとえるならば飲食店のお客様と店員のようなものです。
みなさん、行きつけの定食屋で、からあげ定食を注文することを想像して下さい。
お客様「からあげ定食くださ~い!!」
店員「かしこまりました。」
店員、キッチンスタッフに料理を頼み、料理が完成したら、
店員「お待たせしました。からあげ定食です!」
といって、提供します。
たいていこんなイメージだと思います。
※私の行きつけは食券スタイルですという人は、一旦店員さんがオーダーをうけるスタイルでお願いします。
リクエストとレスポンス
コンピュータの通信も飲食店のオーダーと全く同じです。
情報を注文する側のコンピューターがいて、それに対応する側のコンピュータがいます。
- このとき注文する側のコンピュータ→クライアント
- 対応する側のコンピュータ→サーバ
といいます。
そして、
- 注文のこと→リクエスト
- 対応のこと→レスポンス
となります。
このやりとりをクライアント/サーバモデルといいます。
コンピュータ通信の大半は、このクライアント/サーバモデルだそうです。
クライアント/サーバの役割はアプリケーションが決定づける
コンピュータ通信の大半はクライアント/サーバモデルと書きましたが、厳密に言うと、アプリケーション同士の通信モデルです。
皆さんのコンピュータにも入っているアプリケーション、いわゆるアプリ同士の通信モデルです。
コンピュータ自体はこれらのアプリを動作させているだけです。
なので、コンピュータはアプリなしには通信することはないんです。
実際にどういう流れでページが表示されるかを言語化すると、
- クライアント側のコンピュータに入っているアプリをクリック
- Webブラウザがアプリを開き始めます。
- Webブラウザが「このページが見たい!」という要求(リクエスト)をサーバに対して出します
- クライアントからの要求(リクエスト)を、サーバにインストールされたWebサーバが受け取ります
- Webサーバが要求されたページをサーバが返す(レスポンス)
という流れです。
ここでのポイントは、
- Webブラウザはクライアントソフトウェア
- Webサーバはサーバソフトウェア
であるということです。
コンピュータが、クライアントコンピュータかサーバコンピュータかは、
インストールされているのが、クライアントソフトウェアか、サーバソフトウェアかで決まります。
コンピュータにだけフォーカスをあててもクライアントかサーバかの区別はできません。
クライアントかサーバかを区別するには、ソフトウェアで決まることを覚えておきましょう。
また、ここは余談ですが、
1台のコンピュータの中にクライアントソフトウェアとサーバソフトウェアの両方をインストールして、起動することも出来ます。
HTTPプロトコル
よくラジオとかで、
「番組の公式ページは、http://。。。。。」
みたいなURLが紹介がされて、
「わかりづらいわ~、そんな風に言われても打つ人、いないでしょ~そもそもhttpってなんだよ~」
ってなったことないでしょうか?
少し個別具体的すぎました。
じつは、この"http"ですが、ちゃんと意味があるんです。
この”http”では、
「HTTPという通信プロトコルを使いま~す!!」
と、宣言しているんです。
なので、下のURLをより具体的に翻訳すると、
http://www.sample.co.jp/
→HTTPを使って、www.sample.co.jpと通信始めます!!
と宣言しているということです。
ここでいうプロトコル(protocol)は、規約(ルール、取り決め、約束事)という意味です。
なので、意訳すると、通信プロトコルはお互いの通信ルールとなります。
インターネットに限らず、コンピュータ同士が通信する場合には、何らかの取り決めが必要です。
人間でもコミュニケーションするときは、無意識にルールがありますよね。
- どんな言語でしゃべるか
- どういう順番でしゃべるか
- 家族か友達か取引先か職場の仲間か
とか、コミュニケーションをするときに、お互いにルール確認はしないけど、暗黙のルールとして存在しています。
コンピュータ同士では、人間のように暗黙のルールはありません。
通信をするときに、必ずルール設定・確認をしてから通信が始まります。
この確認作業が"http"になるわけです。
なので、別々の通信プロトコル(ルール)を使っていては「どういうデータを送受信しているのか」が認識できない状態(文字化けと似た状態)になります。
たとえるなら、英語しか理解できない人に、一方的に日本語を話すようなイメージです。
バグりますよね。。。
こういったバグがないように、双方が同じプロトコルを使うことを確かめるのが"http"の役割です。
HTTPとは
ここでいう、HTTPとは、Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル)の略です。
ハイパーテキストのための通信プロトコルという意味です。
ハイパーテキストは、HTMLのことを指すと考えて問題ないです。
HTMLとは
HTMLはHypertext Markup Language(ハイパーテキスト マークアップ言語)の略称です。
HTML = Webページ です。
なので、まとめると、
HTTPは、
Webブラウザ(クライアント)とWebサーバ(サーバ)の間でWebページなどのコンテンツをやりとりするために用いられる通信上のルール
となります。
HTTPSもよく見る・・・。
「https://...というURLも見かけるような。。。」
と、思った方、多いのではないでしょうか。
HTTPSは、
クライアントコンピュータとサーバコンピュータのWebページでのやりとりの際に、すべての通信データに対して、通信相手以外は読み取り不可(暗号化) の状態にして、セキュリティを担保する通信プロトコル
です。
HTTPSのSはSecure(セキュア:安全)の略です。
これは、Web上で個人情報やパスワードを通信する際に、悪い人が盗み読みできないようにするためのものです。
パスワードを入力させるWebアプリケーションを一般公開させる際は、必ずHTTPSを用いて通信データを暗号化すべきです。
HTTPSを使わないと、あなたが個人情報を流出させた当事者になってしまいます。
なので、最近では、新たにWebページを作るなら、HTTPSで作るのが前提と考えて良いと思います。
おわりに
本日の学習は以上となります。
本日のまとめとしては、
- Webブラウザはクライアントソフトウェア、Webサーバはサーバソフトウェアである
- コンピュータがクライアントコンピュータかサーバコンピュータかは、インストールされているのが、クライアントソフトウェアか、サーバソフトウェアかで決まる
- HTTPは、Webブラウザ(クライアント)とWebサーバ(サーバ)の間でWebページなどのコンテンツをやりとりするために用いられる通信上のルール
- HTTPSのSはSecure(セキュア:安全)の略です。定義としては、クライアントコンピュータとサーバコンピュータのWebページでのやりとりの際に、すべての通信データに対して、通信相手以外は読み取り不可(暗号化) の状態にして、セキュリティを担保する通信プロトコル
となります。
本日は以上です!
ひきつづき、プログラミング学習を深めていきます!!
一緒にがんばりましょう!