初心者のための根幹的なWEB知識

# はじめに
完全未経験の私が分からなかったWEBの基本的な知識を未経験にむけて記述したものです。
画面右のリストを見ていただき、分からない用語があればジャンプして確認しましょう！
# WEBサーバーとWEBクライアント

WWWによるHyper Textの公開と閲覧には、具体的には**WEBサーバ**と**WEBクライアント**というソフトウェアで実現されている。

**クライアント**と**サーバ**という言葉はそれぞれコンピュータ上で動作するソフトウェアを指し、「client（顧客）」と「server(支給人）」というそのままの意味が語源になっている。
一般的に、クライアントからサーバに対する要求を **request(リクエスト)** といい、サーバからクライアントへの要求を **response（レスポンス）** と呼ぶ。
また、WEBサーバを通して公開される情報を一般的に **contents(コンテンツ）** という。

# Webアプリケーション

ブラウザ上で動くアプリケーションのこと。
例としてメルカリやamazonが挙げられる。

## WEBサイトとWEBアプリケーションの違い

- WEBサイト
ブラウザがサーバへリクエストを送り、予めサーバが保持しているHTMLや画像をレスポンスするため、状況に応じて異なるコンテンツを出し分けることが出来ない。
- WEBアプリケーション
文字やレイアウトは予め決められておらず、サーバ上でプログラムが実行され、結果によりブラウザへレスポンスするデータを決定する。

# URL

莫大なインターネット上から一意のコンテンツを指定するための仕組みをいう。
URL(Uniform Resouce Locator)  



::: note  例
**例**
https://qiita.com/trend

スキーム // ホスト名 / パス名

:::



### スキーム

リソースを取得するための方法を指定することをスキームという。

スキームの例

| Name | Usage |
| --- | --- |
| https: | 暗号化されたhttp通信を表すスキーム(Hyper Text Transfer Protocol + secure) |
| ftp | FTPプロトコルによる入手を表すスキーム |
| file | ファイルシステムのファイルやディレクトリを参照するスキーム |

### ホスト名

リソースが存在するホスト（コンピュータ）名を表す。
また、ネットワークに接続し、リクエストを受け取り、レスポンスを行うコンピュータのことを**ホストコンピュータ**という。

### パス名

ホスト名で指定されたリソースの位置（階層）を表す。

# IPアドレス

IPアドレスは256x256x256x256通りで振り分けられるアドレス。
**URLはIPアドレス等を人間が覚えやすいよう文字列化したものである。**
IPアドレスはインターネットの利用に限らず、ネットワーク機器とコンピュータが通信を行い識別する際にも利用されているので必要不可欠である。

### グローバルIPとプライベートIP

IPアドレスはグローバルIPとプライベートIPの二種類が存在する。

- グローバルIP
インターネットに接続可能な機器が利用できるアドレスである。
私達が利用しているISP(インターネット・サービス・プロバイダ）が確保・提供しており、インターネットに接続するたびにランダムに割り当てられている。
- プライベートIP
プライベートなネットワーク（組織内のネットワーク）で利用できるアドレスである。インターネット上では利用できず、プライベートネットワーク上での通信に用いられる。
また、ある一定の範囲のIPアドレスをプライベートネットワーク上で自由に利用できるように予約されている。
プライベートIPは主に３種類の範囲が用意されている。
    
    
    | Private IP | Class | Range of numbers |
    | --- | --- | --- |
    | 10.0.0.0 ~ 10.255.255.255 | A | 16,777,216 |
    | 172.16.0.0 ~ 172.31.255.255 | B | 1,048,576 |
    | 192.168.0.0 ~ 192.168.255.255 | C | 65,536 |
    
:::note
**Point**
 実際には、プライベートネットワーク上にコンピュータがClass Cの範囲以上保持することは限りなく無いため、Class CのIP範囲を用いられている事が多い。
   ::: 

    

# DNS

DNS（Domain Name Systems)とは、ドメイン名をコンピュータが読み取れるようIPアドレスに変換する際に用いられるシステムである。ドメイン名と対応するIPアドレスを参照し、コンピュータへレスポンスをするサーバを**DNSサーバ**といい、インターネット上に配置されている。

### トップレベルドメイン

ドメイン名は主に複数階層に分けられている。
（例：google.com)
DNSサーバが素早く処理ができるよう、各階層ごとDNSサーバが配置されておりリスク分散されている。
この.jp/.com/.net/.org といったものを **TLD(Top Level Domain)** と呼ぶ。
**TLD**はルートサーバと呼ばれる一つのDNSサーバで統括されており、インターネットの根本を支えるルートサーバは世界中に配置され、リスク分散されている。

# パケット

ネットワークでデータを送る際に、小さくデータを分割し、効率よく送受信する際に用いられているシステム。

# プロトコル

【どのコンピュータにどのようにデータを送るのか、どれだけのデータを送るのか】とコンピュータなどの機器同士で通信を行うために取り決められたルールのこという。

代表的なもので**TCP/IP**という**プロトコル**が用いられている。

TCP/IP通信においては、 IPアドレスがあればネットワーク上のコンピュータを識別することが可能だが、 **該当するコンピュータのどのプログラムにパケットを届けるかは、 IPアドレスだけでは決定されないので、後述するポート番号を用いる必要がある。**

| System | Example | Usage |
| --- | --- | --- |
| TCP/IP | IP, ICMP, TCP, UDP, SMTP, HTTP etc | 全てのネットワーク |
| IPX/SPX | IPX, SPX, NCP etc | Netware OS環境のLAN |
| AppleTalk | AARP, DDP, RTMP, AEP etc | Mac OS環境のLAN |

# ポート番号

TCP/IP通信を用いて送られてきた情報（パケット）が、どのようなアプリケーションで処理を行うかを識別する番号のことをいう。ポート番号は16ビットの整数であり、 0番～65535番まで存在する。
ただ実際には、URLにはポート番号が記述されておらず、省略されている。
理由は、各プロトコルにポート番号が標準指定されており、通信で用いられたプロトコルで判別可能であるためである。これを**Well-Known Port**とも呼ぶ。

| protocol | Port number |
| --- | --- |
| FTP | 20,21 |
| SSH | 22 |
| Telnet | 23 |
| SMTP | 25 |
| DNS | 53 |
| **HTTP(WEBブラウジング）**| 80 |
| POP3 | 110 |
| **HTTPS（暗号化されたHTTP)** | 443 |

# ステートフルとステートレス

## Stateful Protocol

サーバ側が前回のリクエスト結果を記憶しており、それを踏まえてリクエストの状態が変化していくプロトコル（状態を持つプロトコル）のことをいう。例としてAnonymous FTP Serverがある。
Stateful Protocolは通信手段が段階的でオーバーヘッド（本来の処理を行うには不必要な処理）がStateless Protocolに比べ大きく、アクセスのためには認証が必要である。

## Stateless Protocol

前回のリクエストは記憶しておらず、状態も保持できないプロトコルのことをいう。例としてHTTPプロトコルがある。Stateless Protocolは通信手段が可及的でありオーバーヘッドがStateful Protocolに比べ少なく、認証も不要である。
逆に、HTTPプロトコルはStattelessのためWEBブラウザにおけるアクセスユーザなどを保持できないという問題もある。

# CooKie

ステートレスなプロトコルであるHTTPのヘッダを拡張し、状態を保持させる（ステートフルにする）ために生まれた技術のことをいう。

## Session

「ログイン→注文→注文確認→ログアウト」のように、決められている一連の処理のことをいう。

## Session ID 及びCookieの動作

初めてWebサーバへリクエストした際、サーバは**Session ID**という識別符を作成し、アクセスユーザーと紐付けブラウザへレスポンスを返す。ブラウザは送られてきた**Session ID**とサーバ情報をデータ片（これをCookieと呼ぶ）に保持する。
また、２回目以降はサーバへリクエストを行う際、Cookieに保持されていたサーバ情報を基にSession IDが送信され、Session IDによりサーバがユーザを識別可能となり、データとユーザ（Session ID）を紐付けた状態でデータベースへ保存・参照ができる。
Session IDは特に情報を保持していないため、CooKieそのものに情報を保持させるより秘匿性・安全性が高い。

# データベース

決まった形式で整理された（構造化された）コンピュータ上で扱う情報の集合

## DBMS
データベース管理システムともいう。
データベースの実現と取り扱いに特化したソフトウェア。
データベースに対して情報群の整理やさまざまな条件で高速に検索したり計算することができる。

## CRUD

データの生成（Create)・データの読み取り(Read)・情報の更新(Update)・情報の削除(Delete)のそれぞれの頭文字をとって総称したものである。
 > 個人的に未経験に求める最低ラインの技術力にCRUDアプリケーションが作成できることだと思っています。

# アーキテクチャ

実現が求められている機能群を分割・整理し、それらが製品の部品群の中にどのようにマッピングされたのか、そして、部品群間相互の接続の仕方などに関する基本的な考え方。
基本設計や設計思想ともいい、設計スタイルとその設計に基づく全体構造のことをいう。

# フレームワーク

前節のアーキテクチャの知見を元に、webアプリケーションのアーキテクチャを実現する部分は共通化し、異なる部分だけを作り込めることを目的とした枠組み・構造。
 > ※あくまでwebアプリケーションにおけるフレームワークの定義

# おわりに
本記事はWEBの表面上の知識しか説明していません。説明していない用語（インフラなど）や各sectionごとまだまだ掘り下げることができますので、気になったところがあれば好奇心旺盛に調べていってください！

また、つよつよエンジニアの方、本記事中でもっと端的に説明できたり、誤った説明があればコメントをよろしくおねがいします。適宜変更させていただきます。