こんにちは、ヒエと申します。
現在は非IT業界にてITに関する企画を行う業務に主に取り組んでおりますが、webエンジニアへの転職を目指して日々少しずつ学習を進めております。
Qiitaも最近開設しましたが、はてなブログでは読んだ本の感想や学習の振り返りを記録するような使い方をしたいと考えております。
さて1回目の投稿ですが、webに関する基本的な用語が分からなければ今後の学習に影響が出るため、先ほど読了した「プロになるためのWeb技術入門」を振り返りつつ、この本で登場した用語についていくつか振り返りたいと思います。
サーバーとクライアントのリクエスト/レスポンスとは
webプログラムは、インターネット上のサーバーの中に設置されています。このサーバーのwebプログラムにアクセスする世界中の各ユーザーのことをクライアントと言います。
このクライアントからサーバーに対して何かしらの動作の要求をすることをリクエスト、その要求に対するサーバからクライアントへの応答をレスポンスと言います。
なおHTTPリクエストのことを省略してリクエストと呼ぶこともありますが、SMTP等、他の通信プロトコルでもリクエスト・レスポンスという用語を使用します。
プロトコルとは
サーバーとクライアント等のコンピューター同士が通信を行う際に、どのような情報をどうやってやり取りをするのか、あらかじめ定義をしなければ、通信のやり取りは実現できません。そこで、あらかじめコンピューターの接続する方法や信号の送る内容等、通信の取り決めを決めておく必要があります。この取り決めを「(通信)プロトコル」と呼びます。
TCPやIPなどネットワークの通信の基本を定義するものもプロトコルの一種です。一方でうWebブラウジングを行うHTTPやファイル転送を行うFTPなどアプリケーション層で機能するデータ通信も全てプロトコルの一例です。
ポートとは
クライアントとサーバーはIPアドレスというインターネット上の住所のようなものを頼りにデータのやり取りの宛先を特定しております。この宛先を特定しパケットに分割してデータ送信を行うプロトコルをTCP/IPと呼びます。
このTCP/IPについて、受信をしたPC側が、どのアプリケーション層のプロトコルでどのように処理をするべきかどうか、TCP/IPでは判別ができないという課題があります。
そこで、TCP/IPによって情報を受け取るアプリケーションは、0から66535までの数字で表された「待ち受けポート」をあらかじめ決めて情報を待つようにし、この数字の場合はこの処理を行う、と事前に決めておくという手法を取り入れています。この処理の判別に使用する数字をポートと言います。
特に上記で挙げた代表的なプロトコルであるFTP、SMTP、HTTPは、頻繁に利用されるために使用するポート番号が固定されております。(右から順に20-21,25,80)このようなポートをウェルノウンポートと呼びます。
ステートフルとステートレスの違い
クライアントとサーバ間のやり取りは、ステートフルとステートレスの2種類の仕組みに分類されます。
ステートフルとは、クライアントとサーバーが1回やり取りした内容をサーバー側が保持して、その内容に応じて2回目以降のやり取りも継続する手法です。
ステートフルのやり方では、やり取りの内容を元に処理内容を分岐させることもできるため、効率よくクライアント・サーバー間でコミュニケーションが取れるというメリットがありますが、複数のユーザーがサーバーにステートフルな通信を行うとサーバーの負荷が大きくなるというデメリットがあります。
ステートフルな通信プロトコルの例として、FTPやSSHなどが挙げられます。
一方、ステートレスは、サーバー側がクライアント側とやり取りした内容や状態は保持せず、同じリクエストには同じレスポンスを返すという仕組みです。ステートフルと比べるとオーバーヘッドが小さいというメリットがあります。
ステートレスな通信プロトコルの例として、HTTPが挙げられます。
Cookieとは
上記のようにHTTPはステートレスですが、オーバーヘッドの少ないHTTPのプロトコルでも、ログイン保持やショップの購入情報の保持を行いたい場合があります。これを解決するために利用する技術が「Cookie」です。
Cookieはステートレスな通信を行うときに、サーバーからのレスポンスとしてクライアント側にCookieを一緒に送信します。次回の同じサーバーへのリクエスト時にこのCookieをサーバーに送り返すことにより、前回のリクエスト時に使用した変数等の情報を引き続き扱うことができます。
この手法により、ステートレスなプロトコルでも情報を保持してクライアントとサーバー間でやり取りを継続できます。