URL を入れると何が起きるか — DNS・HTTP・HTTPS

この記事は、プログラミングやバイブコーディングをする上で最低限身につけたほうがよい IT の実践的な知識を 1 から身につける「IT 基礎知識講座の一部」です。
URL は 4 つの部分に切って読めます。名前を番号に変える DNS、中身をもらう HTTP、途中で読まれないようにする HTTPS までを図解でたどります。

この記事は、URL を入れてから画面が出るまでに起きることを扱います。

出てくるのは、名前を番号に変える DNS、中身をやり取りする HTTP、その通信を読まれないようにする HTTPS の 3 つです。

打ち込んだ 1 行は、4 つの部分に切り分けられる
http://localhost:3000/reserve先頭httplocalhost番号:3000後ろ/reserveどんな決まりで送るかどのコンピュータかどのプログラムかどのページか
上が打ち込んだ 1 行。中段がその部分、下段がそれぞれが答えていることです。4 つがそろって、はじめてどこへ何を送るかが決まります。

3 つがそろって、はじめてどこへ何を送るかが決まります。

URL は、どのコンピュータのどのページかを指す文字列

手順で打ち込むこの文字列がURL(Uniform Resource Locator。開きたいページがどのコンピュータのどこにあるかを 1 行で指す文字列)です。

URL 1 行の中身
URL 1 行(http://localhost:3000/reserve)
先頭 — http
  • 「://」の手前までがこの部分
  • ここが https なら、送る中身が暗号化される
中 — ドメイン(domain name)
  • インターネット上のコンピュータに付けた、人が読める名前
  • 公開されたサーバーには example.com のような名前が付く
  • 手元で使う localhost は、それを打ち込んだパソコン自身を指す決まった名前
  • どのコンピュータに要求を届けるかが、ここで決まる
番号 — ポート番号(port number)
  • 1 台のコンピュータの中で、どのプログラムに要求を届けるかを指す番号
  • 複数のプログラムが同時に要求を待てるので、この番号で相手を決める
  • http は 80 番、https は 443 番と決まっているので、その番号のときは書かない
後ろ — /reserve
  • 「/」から始まる、同じサーバーの中のページの位置
  • 省略すると、そのサーバーの入口のページになる
外枠が http://localhost:3000/reserve という 1 行です。上から順に、送り方の決まり・どのコンピュータか・その中のどのプログラムか・どのページかが並んでいます。

この 4 つを切り分けているのは、ブラウザ自身です。

URL は 4 つに切って読む

URL は、4 つの部分をつないだ 1 行です。

先頭が送り方の決まり、中がどのコンピュータか、番号がその中のどのプログラムか、後ろがどのページかで、手元の URL も公開された URL も、入っている文字が違うだけの同じ 4 つでできています。

URL を入れてから画面が出るまで — DNS と HTTP

前の記事で見た IP アドレスがその番号です。

ドメインから IP アドレスを調べる決まりがDNS(Domain Name System)、ブラウザとサーバーがリクエストとレスポンスをやり取りする決まりがHTTP(HyperText Transfer Protocol)です。

DNS の対応を持ち、問い合わせに答えるのが DNS サーバーです。

ブラウザが送る要求がリクエスト、返ってくる返答がレスポンスで、URL を入れてから画面が出るまでに、ブラウザは 2 つの相手に順番につなぎます。

ブラウザは、2 つの相手に順番につなぐ
ブラウザ① DNS サーバーに名前を聞く返るのは番号だけ203.0.113.5ページの中身は返らない② その番号あてにつなぐ/reserve を見て返すものを選ぶページの中身が返る
左のブラウザから上下 2 本に分かれます。上が 1 番目の DNS サーバー、下が 2 番目の Web サーバーで、返ってくるものが違います。

先に名前を番号に直し、そのあとで中身を取りに行く、という順番です。

先につなぐ DNS サーバーが返すのは番号だけで、ページの中身は返しません。

中身を持っているのはその番号あてにつないだ先のサーバーで、URL の後ろの /reserve を見てから返すものを選びます。

同じサーバーでも、/reserve と /login では選ばれる中身が違います。

返ってきたレスポンスには 3 桁の番号とページの中身が入っていて、画面に出るのは中身のファイルだけです。

名前を番号に変えてから、中身をもらう

ブラウザがしているのは、読んで、聞いて、もらって、描くの 4 つです。

打ち込んだ URL を 4 つに切り分け、DNS サーバーに番号を聞き、その番号あてにページを求めます。

サーバーは URL の後ろを見て返すものを選び、うまくいったかどうかを表す番号と一緒に返します。

HTTPS は、通信の途中で内容を読まれないための決まり

http で始まる通信は打ち込んだ文字がそのままの形で流れるので、通り道の機器で中身を読めます。

これを防ぐのがHTTPS(HyperText Transfer Protocol Secure)で、送る中身を暗号化(encryption。決められた相手以外には元に戻せない形に変換すること)してやり取りします。

同じ文字でも、http と https で通り道に見えるものが変わる
打ち込んだpassword123http で送る通り道の機器にそのまま読めるサーバーは打ち込んだ文字を読むhttps で送る通り道にはあて先の名前だけ分かるサーバーが元に戻して読む
左が打ち込んだ同じ文字です。上の道が http、下の道が https。サーバーが読み取る文字はどちらも同じで、違うのは真ん中の通り道だけです。

サーバーが読み取る文字はどちらも同じで、違うのは通り道の機器に何が見えるかだけです。

https でも、どのサーバーあてかは通り道に分かります。

分からないのは、どのページを開いていて、何を打ち込んだかです。

https の 1 回の通信で、通り道に分かることと分からないこと
https で送った1 回の通信通り道の機器に分かること通り道の機器に読めないことexample.comというあて先打ち込んだパスワードページの中身どのサイトを見たかは記録に残る途中で見られても中身は読めない
上の 1 回の通信が、左右の 2 つに分かれます。左だけが通り道の機器に見え、右は見えません。いちばん下が、そこから起きることです。

HTTPS には、相手がそのドメインの持ち主かを確かめる仕組みも含まれます。

証明を出すのはサーバー自身ではなく、認証局(certificate authority。ドメインの持ち主を確かめて証明を発行する第三者)です。

証明の中には、相手が本物かを確かめるのに使う公開鍵(public key。誰に渡してもよい鍵)が入っています。

確かめるほうが先で、暗号化はそのあとです。

相手が持ち主だと分かってから鍵を作るので、途中の機器が間に入っても中身は読めません。

https は中身を読ませない

http と https の違いは、通り道で中身を読めるかどうかだけです。

http はそのままの文字が流れるので通り道の機器が中身を読めますが、https は送る前に文字を変換するので、通り道に分かるのはあて先の名前までです。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1手順の http://localhost:3000 にある localhost は、どのコンピュータを指していますか。

Q2example.com のようなドメインから、通信に使う IP アドレスを調べる仕組みはどれですか。

Q3https で始まる URL と http で始まる URL の違いは何ですか。