HTTPについて勉強している過程でまとめてみました。
URLの基本構造と、URLをクリックしてページが表示されるまでの流れに分けて書いています。
誤りなどがあればご教示いただけますと幸いです。
URLの基本構造
まずはURLの基本構造を見ていく。
URLはスキーマ、オーソリティ、リソースへのパス、クエリパラメータで構成されている。
例として 郵便局HP | 100-0005 の検索結果 のページのURLを見てみよう。
https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=1010005
このURLは、以下のような構造になっている。

スキーマ
英語で仕様のこと。
https
の部分が相当し、「通信規格はHTTPSを使ってね」という指示になる。
HTTPSとは?
「暗号化されたHTTP」のこと。HTTPとは「WebサーバーとWebブラウザが情報をやり取りする時の通信規格」である。
HTTPでは、クライアント(ユーザーのPCなど)がサーバーにリクエストを送る
→ サーバーがクライアントにレスポンスを返す
という流れで通信が行われる。
HTTPの特徴として、一つのリクエストに対して一つのレスポンスが返る というのがある。もちろん、通信全体では一回の接続で複数のリクエストとレスポンスをやり取りできるが、それぞれのリクエストとレスポンスは必ず一対一で対応する。
オーソリティ
①ユーザー情報、②ホスト名、③ポート番号 を含む部分の総称。
基本構文は [ユーザ情報@]ホスト名[:ポート番号]
である。
たとえばウェブ開発でよく使う
http://localhost:3000
は、②ホスト名:localhost
、③ポート番号:3000
URL再掲:
https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=1010005
この場合、 www.post.japanpost.jp
がオーソリティ部分に相当する。
内容は ②ホスト名:www.post.japanpost.jp
のみ。
詳細は割愛するが、今回のホスト名 www.post.japanpost.jp
は以下のような構造になっている。
-
www
:省略可能。World Wide Web というシステムを使うよという指示 -
post
:サブドメイン(メインサイト内のサブサイトのようなイメージ) -
japanpost
:メインドメイン(メインサイトのドメイン) -
jp
:最上位ドメイン
リソースへのパス
参照したいファイルなどの場所を示す部分。
URL再掲:
https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=1010005
この場合、/cgi-zip/zipcode.php
が相当し、「/cgi-zip/zipcode.php
というパスのファイルを参照したいんだけど」という指示になる。
クエリパラメータ
ウェブページに渡すための引数。
URLの後ろの方で、?
以降に key=value
を書く形で記述される。
URL再掲:
https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=1010005
この場合、?
以降の zip=1010001
の部分が相当し、「あ、zip
は 1010001
でお願いします」という指示になる。
URLをクリックしてページが表示されるまでの流れ
*クライアント:ユーザーのPCのこと
1. URLの文字列からホスト名を取り出し、DNSにサーバーのIPアドレスを問い合わせる
クライアント:
(ページを表示したいけど、サーバーの住所はどこだ?)
クライアント:
(ふむ、住所を知るには、DNSというシステムに問い合わせればいいのか。問い合わせの際にはホスト名が必要らしい)
*DNS=Domain Name System
ホスト名(たとえばja.wikipedia.org)の入力に対して、DNSサーバと呼ばれるコンピュータを参照し、そのホストが持つIPアドレス(たとえば130.94.122.197)を検索するシステムである。
(出典:Domain Name System | Wikipedia )
クライアント:
(今回のページのホスト名は www.post.japanpost.jp
だな)
...
クライアント:
「DNSさん、www.post.japanpost.jp
の住所を教えてほしいんですが…」
DNS:
「ほい」つIPアドレス
2. クライアント(ブラウザ)が、特定したIPアドレスにあるサーバーにリクエストを送信する
クライアント:
(よし、DNSからもらったIPアドレス上のサーバーに、リクエストを送信しよう)
クライアント:
「hey、ページに表示する内容をください」
3. サーバーからクライアントにレスポンスが返される
サーバー:
「ほい、これが結果だよ」つHTMLファイルとか
4. クライアントが受け取ったレスポンスをもとにページの内容を表示する
クライアントのブラウザ:
「これをこうして…こうじゃ!」(レンダリング)
参考文献