📖

webの基礎:HTTP通信の仕組み / ホスティングとドメインの関係性

2023/06/30に公開

HTTP通信の仕組みとブラウザレンダリングの仕組み

今日は基礎の基礎であるけども、なかなか難しい通信の仕組みとレンダリング。
(私は、難しかった。笑)
今日はまずHTTP通信について書きます。

HTTP通信  -Webの基本プロトコル、HTTPとは?

最初に簡単に!流れを要約すると...

  1. URL解析
  2. DNSでIPアドレス取得
  3. IPアドレスでwebサーバーにリクエスト
  4. ポート番号わりあてる
  5. HTTPリクエスト送信
  6. ロードバランサーでアクセス調整
  7. HTTPレスポンス送信
  8. レンダリング
    ( => ブラウザレンダリングへ続く )

この流れに沿って解説していきます。

■ 1. まずはURLの解析を行う。

URL(Uniform Resouse Locator)とは...
インターネット上のWebページやファイルの位置や場所を示すもの。インターネット上の住所
上記のように、さまざまな要素で作られている。

例として、私のzennのURLを使用し解説していきます。
URLは以下のようにさまざまな要素で構成されています。

  • プロトコル
    コンピュータでデータをやりとりするために定められた手順や規約、信号の電気的規則、
    通信における送受信の手順などを定めた規格のこと。

  • ドメイン:
    インターネット上の住所インターネット上のネットワークを特定する文字列。
    IPアドレスを、人にわかりやすいようにしたもの。
    (なぜドメインがあるかというと、人にわかりやすくするため。)
    (似ているホスト名は、ネットワーク上のコンピュータを特定する文字列。)

-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・
プロトコルで、 通信手段を判断し、
ドメインで住所特定します。その住所を特定しサーバーと通信を行う(リクエストを行う)ためには、
IPアドレスの取得が必要になります。

補足:キャッシュがある場合

キャッシュとは
低速な記憶装置や伝送路から読み出したデータのうち、直近に読み込んだものや
使用頻度が高いものを高速な記憶装置に複製しておくこと。

簡単に言うと、キャッシュとは、一時的に保存できる場所。
過去に同じサイトを見てるとそのページのIPアドレスがキャッシュとして残っている。

この場合は、もう一度"DNSへ送りIPを取得"、の段階が不要になる。
初めてアクセスする場合は、以下"3. DNSでIPアドレス取得"が必要。

-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・

■ 2. DNSでIPアドレス取得する。

IPアドレス
インターネット上の住所。serverの住所。

DNS(Domain Name System)と、DNSサーバー:
ドメインとIPアドレスを対応付けて管理するシステムのことをDNSという。
「IPアドレス」を、人が理解しやすい住所「URL」へと、(リクエストできたURLを,IPアドレスへ)
変換するための仕組みのこと。
そして、このDNSの機能を司るサーバーを「DNSサーバー」という

-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・
DNSサーバーが、IPアドレスもドメインも知っている。
(IPアドレスとドメインを紐付けているから。)
この仕組みを利用して、わたされたURL(ドメイン)をIPアドレスに変換することで、
webサーバーへのリクエストの送信ができるようになる。そして次の段階、リクエスト送信へ。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・

HTTP通信:3. IPアドレスでwebサーバーにリクエスト

上記で、URLからDNSを使用し、IPアドレスを取得した。
取得したIPアドレスを今度はwebサーバーにリクエストします。
上記の図でいくと、"35.190.77.180のページ見せて~!"って感じですね。
このリクエストを送る際はポート番号を割り当てる。

HTTP通信:4. ポート番号わりあてる

ポート番号とは
インターネットで標準的に用いられるプロトコル(通信規約)であるTCP/IPにおいて、
同じコンピュータ内で動作する複数のソフトウェアのどれが通信するかを指定するための番号。
単に「ポート」と略されることもある。

簡単には、ネットワークとパソコンの間にあるドア(ポート)に割り振られている識別用の番号のこと。
TCPやUDPといったトランスポートプロトコルによって、
通信が正しいアプリケーションに到達するようにポート番号が利用される。

(=> トランスポートプロトコルについては、ここでは省略します。難しい...)

今回リクエストしている、https://zenn.dev/airiswim(35.190.77.180)
は、プロトコルがhttpsなので、443と自動的に割り当てられる。


これは決まりごとで自動的にプロトコルに応じてきまる
developer ツールでも確認してみると...

443とポート番号がついていることが、確認できた。

よく知られているポート番号
ポート番号 プロトコル/サービス 用途・説明
21 FTP ファイル転送プロトコル(FTP)は、ファイルの転送やアクセスを行うためのプロトコル。クライアントとサーバー間でファイルの送受信や操作を行うために使用される。
53 DNS ドメイン名システム(DNS)は、ドメイン名とIPアドレスの相互変換や、ネットワークリソースの検索を行うためのプロトコル。名前解決に使用される。
67/68 DHCP ダイナミックホスト構成プロトコル(DHCP)は、ネットワーク上のコンピュータにIPアドレスやその他のネットワーク設定を自動的に割り当てるためのプロトコル。
443 HTTPS セキュアなハイパーテキスト転送プロトコル(HTTPS)は、HTTPの暗号化バージョン。ウェブサイトのセキュアな通信(SSL/TLS暗号化)に使用される。
3389 RDP リモートデスクトッププロトコル(RDP)は、リモートでコンピュータを制御するためのプロトコル。リモートデスクトップ接続に使用される。
587 SMTP(TLS/STARTTLS) SMTPの拡張バージョンで、暗号化された通信を提供する。メール送信においてセキュリティを強化するために使用される。
3306 MySQL MySQLデータベースサーバーへの接続に使用される。データベースのクエリやデータの操作を行うためのポート。
8080 HTTP(代替ポート) 一般的なHTTPポート番号である80番ポートが使用できない場合や、別のポートを指定することでアクセスすることができる。代替ポートとして一般的に使用される。

HTTP通信:5. HTTPリクエスト送信

これまでの情報含めて、ようやく、HTTPリクエストが送ることができる。
では、フォーマットがあり、やり取りされる。
大枠は以下のようになっている。

リクエストライン、ヘッダー、空行挟んで、メッセージボディとなっている。
ディベロッパーツールで確認できる。

HTTP通信:6. ロードバランサーでアクセス調整

ロードバランサーとは
負荷分散装置とも呼ばれている。
ネットワークやサーバーの負荷を分散するためのデバイスやシステムのこと

リクエストを受け取った際に、それを複数のバックエンドサーバーにアクセスを分散させる役割を果たす。

ロードバランサーがないと、負荷集中してしまう
サーバーに直接リクエストが送信されるため、トラフィックが特定のサーバーに集中し、
そのサーバーが過負荷になる可能性があり、
レスポンスの遅延やアプリケーションのパフォーマンスの低下が生じる可能性がある。

HTTP通信:7. HTTPレスポンス送信

ここまできたらレスポンスを返信します。
これにも、HTTPリクエストで記したフォーマットが使用されるが、
違うのは、上部がステータスラインになる。

このHTTP レスポンスのステータスコードについてはこちらのページにまとめています。
興味があれば見てください!

簡単に書くと...
  1. 情報レスポンス (100–199)
  2. 成功レスポンス (200–299)
  3. リダイレクトメッセージ (300–399)
  4. クライアントエラーレスポンス (400–499)
  5. サーバーエラーレスポンス (500–599)
ステータスコード 種類 説明
1xx 情報レスポンス クライアントのリクエストが受信されたことを示す。
100 Continue リクエストを継続できることを示す。
101 Switching Protocols サーバーがプロトコルを切り替えてリクエストを処理していることを示す。
2xx 成功レスポンス クライアントのリクエストが成功したことを示す。
200 OK リクエストが成功したことを示す。
201 Created 新しいリソースが作成されたことを示す。
204 No Content レスポンスにコンテンツがないことを示す。
3xx リダイレクトレスポンス クライアントが追加のアクションを実行する必要があることを示す。
301 Moved Permanently リクエストされたリソースが移動したことを示す。
302 Found リクエストされたリソースが一時的に移動したことを示す。
304 Not Modified クライアントが最新のコンテンツを保持しているため、サーバーは更新されたコンテンツを返さないことを示す。
4xx クライアントエラーレスポンス クライアントが間違ったリクエストを送信したことを示す。
400 Bad Request リクエストが不正であることを示す。
401 Unauthorized 認証が必要であることを示す。
404 Not Found リクエストされたリソースが存在しないことを示す。
5xx サーバーエラーレスポンス サーバーがリクエストを処理できなかったことを示す。
500 Internal Server Error サーバーが何らかのエラーでリクエストを処理できないことを示す。
502 Bad Gateway サーバーがリクエストを処理するためのアップストリームサーバーから不正なレスポンスを受け取った

HTTP通信:8. レンダリング

ここは次回詳細を、記載したいと思います。


ホスティングとは...

ホスティングとは、一言で言うと「サーバを借りること
事業者が所有するデータセンター内に設置されたサーバをインターネット経由で貸し出すこと。

ホスティングには種類がある。

  • 共有ホスティング:一台のサーバを複数のユーザーで利用。
  • 専用ホスティング:一台のサーバを1ユーザーが占有
  • 仮想専用ホスティング(VPC):一台のサーバを仮想マシンに分割して専用サーバとして貸し出す。

ドメインとホスティングの関係性

ホスティングとドメインは、共通してウェブサイトをオンラインでアクセス可能にするために必要な要素。

ウェブサイトを構築するには、
このホスティングを行ったアカウントとドメインの両方が必要になります。

ホスティングとドメインは異なるものだが、密接な関係性がある。

ホスティング ドメイン
ウェブサイトやアプリケーションのファイルや
データを保存し、インターネット上で
アクセス可能にするためのサービス
ウェブサイトやアプリケーションを
識別するためのアドレス。
ネットワークを特定するための
インターネット上の住所

具体的には、
ドメインを取得すると、ドメインレジストラと呼ばれる登録業者を通じてドメインの所有権を確立。
その後、ホスティングプロバイダーにアカウントを作成し、
ウェブサイトのファイルやデータをホスティングサーバーにアップロード。
そして、ホスティングプロバイダーに提供されたドメインの設定を変更し、
ウェブサイトとドメインを関連付ける。

このようにして、
ホスティングとドメインは協力して、ウェブサイトをオンラインで利用可能にする。

ユーザーはドメインを使用してウェブサイトにアクセスし、
ホスティングプロバイダーが提供するサーバーからウェブサイトのコンテンツを取得することができる。

= ドメインを使用してウェブサイトのアドレスを指定し、
ホスティングプロバイダーが提供するサーバーからウェブサイトのコンテンツを取得する。


以上!

Discussion