Web技術の基本について

# はじめに
　Webアプリケーション開発をするためには、プログラミング言語やフレームワークの使い方だけでなく、Webアプリケーションが動作する仕組みについても理解する必要があります。

　Webアプリケーションの根本の仕組みが理解できていないと、開発したアプリケーションが意図通りの動作をしない場合に、何が原因なのかを突き止めて解決することはできません。

　そこで本記事では、これからWebアプリケーション開発を学ぼうとする方におすすめの教材である[プロになるためのWeb技術入門](https://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352)で説明されているWeb技術の基本用語の一部を簡単にまとめました。

# ステートフル
- リクエストに伴って状態が変わっていく(**状態を保持する**)こと
- その時点までのやり取りによってレスポンスの内容が変わる
- 理髪店で例える場合、ステートフルは高級美容室
    - 来店したお客さんの情報を記録しておき、誰が対応したのか、どんな髪型にしたのかなどがわかるようになっている

#  ステートレス
- リクエストの情報のみからレスポンスを返す(**状態を保持しない**)こと
- その時点までのやり取りによってレスポンスの内容が変わらない
- 理髪店で例える場合、ステートレスは1000円カットの床屋さん
    - 手早くたくさんのお客さんを捌いてコストを下げる為に、来店したお客さんの情報を記録していない。そのため、前回の髪型を考慮したサービスは受けられない。

# リクエスト
- WebクライアントがWebサーバー上に保存されている情報(**HTML(Hyper Text Markup Language)**)を要求すること
- WebクライアントがブラウザでURL(Uniform Resource Locator)を入力し、Webサーバーに要求している内容を**HTTP(Hyper Text Transfer Protocol)リクエスト**という
- HTTPリクエストは「リクエスト・ライン」と「メッセージ・ヘッダ」で構成されている
    - リクエスト・ライン
      「メソッド」、「URL(正確にはURI(Uniform Resource Identifier)だが実質的にほぼ同じ意味として扱われている)」、「HTTPバージョン」の3つで構成され、「何をどうしたいか」を表す
    - メッセージ・ヘッダ
      リクエストの付加的な情報を表す

# レスポンス
- WebサーバーからWebクライアントへのリクエストに対する応答のこと
- HTTPリクエストに対する応答(リクエストの内容)を**HTTPレスポンス**という
- HTTPレスポンスは「ステータス・ライン」、「メッセージ・ヘッダ」、「メッセージ・ボディ」で構成されている
    - ステータス・ライン
「HTTPバージョン」、「ステータス・コード」、「レスポンス・フレーズ」の3つで構成され、リクエストが成立したかどうかを表す

    - メッセージ・ヘッダ
      レスポンスの付加的な情報を表す

    - メッセージ・ボディ
      HTMLの内容や画像などをテキスト形式で表す

#  Cookie
- Webブラウザに状態を保持させる技術
- WebサーバーからWebブラウザへHTTPレスポンスのヘッダを利用して送信する情報をCookieと呼び、「名前=値」の組み合わせで表される
### Cookieの仕組み
- WebサーバからCookieを受け取ったWebブラウザは、次回同じWebサーバにアクセスする際、受け取ったCookieをそのままHTTPリクエストのヘッダに入れて情報を送る。Webアプリケーション側では、リクエスト・ヘッダに入っているCookieを調べることで、アクセスしてきた相手がどのような相手なのかを知ることができる。
- Cookieを受け取った後、Cookieを受け取ったサーバーと異なるWebサーバーに対してはCookieを送らない。

#  プロトコル
- WebクライアントとWebサーバーがインターネット上で情報通信を行うための取り決めのこと
- 「どのように情報通信を行うか」の方法と、「情報にどのような意味付けがされているか」について取り決めをしている
- HTTPはHTMLの転送に適した現在最も幅広く利用されているプロトコルである

# ポート番号
- コンピュータの中でアプリケーションが情報を受けとるための番号
- インターネット上で情報を相手のコンピュータに届けるためには、IPアドレスに加えて、届いた情報をどのアプリケーションで処理すべきかを示すポート番号を指定する必要がある。
- URLにも末尾にポート番号の指定が必要なのだが、代表的なプロトコルについては、標準で使用されるポート番号が取り決められており、入力を省略することができる。
- 代表的なプロトコルで使用されるポートは **ウェル・ノウン・ポート(well-known ports)** と呼ばれる

### 代表的なプロトコル
 | ポート番号 | プロトコル |
|:-:|:-:|
|  20,21 |  FTP(ファイル転送) |
|  22 |  SSH(暗号化されたリモートコンピュータとの汎用通信) |
|  23 | Telnet(リモートコンピュータとの汎用通信)  |
|  25 |  SMTP(メール送信) |
|  53 |  DNS(ホスト名解決) |
|  80 |  HTTP(Webブラウジング) |
|  110 |  POP3(メール受信) |
|  443 |  HTTPS(暗号化されたHTTP) |

# 参考文献
[『プロになるためのWeb技術入門』なぜ，あなたはWebシステムを開発できないのか](https://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352)
小森 裕介