LoginSignup
0
0

Webページが表示される仕組みについてまとめてみた

Last updated at Posted at 2023-06-16

はじめに

WEBページにアクセスした際にどのような仕組みでWEBページが表示されるのかについてきちんと理解していなかったので、その仕組みについてまとめました。間違い等あればご指摘ください!

WEBページ表示の大まかな流れ

WEBページが表示される際の大まかな流れは以下の通りです。
1.ブラウザにアクセスしたいURLを入力する。
2.入力されたURLに含まれているドメインをDNSサーバに問い合わせ、ドメインをIPアドレスに変換する。
3.DNSサーバは対応するIPアドレスをブラウザに返答する。
4.ブラウザは指定されたIPアドレスに対して、リクエストを要求する。
5.リクエストをWEBサーバが受け取り、指定されたWEBページを表示する。

DNSサーバの名前解決の仕組み

ユーザがURLをブラウザに入力してリクエストを送信した際の処理についてもう少し詳細にまとめます。

キャッシュDNSサーバへの問い合わせ

まず、ユーザがURLをブラウザに入力して検索ボタンを押すと、まずは、キャッシュDNSサーバに対して、指定されたページのIPアドレスを持っていないか確認します。ここでもし以前にそのURLにアクセスしたことがあれば、キャッシュDNSサーバにアクセスしたいサイトの接続先情報が残っているので、キャッシュDNSサーバは指定したURLに対応する、IPアドレスを返答します。もし、キャッシュDNSサーバに指定したURLのIPアドレスが残っていなければ、キャッシュDNSサーバがコンピュータの代わりに上位DNSサーバに問い合わせを行います。

スクリーンショット 2023-06-04 11.59.34.png

DNSサーバへの問い合わせ

キャッシュDNSサーバに指定したURLに対応するIPアドレスがなければ、上位DNSサーバに対して問い合わせを行います。まずは権威DNSサーバという、世界に13台しかないDNSサーバに問い合わせを行い、それから下位のDNSサーバに対して問い合わせを行い、最終的に指定したサイトのIPアドレスを知ることができます。以下にその仕組みを図解します。
スクリーンショット 2023-06-16 11.46.22.png

WEBサーバが指定のページを表示するまで

WEBサーバへのリクエスト

WEBサーバのIPアドレスがわかったので、WEBサーバにHTTPリクエストを送ります。QiitaのトップページにHTTPリクエストを以下のコマンドで送信してみます。

curl -v https://qiita.com/

ここで送信したリクエストの一部を抜粋します。

> GET / HTTP/2
> Host: qiita.com
> user-agent: curl/7.88.1
> accept: */*

1行目はリクエストライン、2~4行目はヘッダー、今回はGETメソッドなのでメッセージボディはないですがPOSTメソッドなどではWEBサーバへの送信内容などもこのリクエストの中に含まれます。

WEBサーバからのレスポンス

WEBサーバからのレスポンスを一部抜粋します。

< HTTP/2 200 
< date: Fri, 16 Jun 2023 02:01:52 GMT
< content-type: text/html; charset=utf-8
< server: nginx
< x-frame-options: SAMEORIGIN
< x-xss-protection: 1; mode=block
< x-content-type-options: nosniff
< x-download-options: noopen
< x-permitted-cross-domain-policies: none
< referrer-policy: strict-origin-when-cross-origin
< vary: Accept
< etag: W/"5c2a8edb06aaa7f267d5788fd4d259f3"
< cache-control: max-age=0, private, must-revalidate
< set-cookie: _qiita_login_session=p6tBaG%2FoA6in5jycw18LgHpIPDrHBXz72MQaYma7sCqHQnvpq8OkAUoy%2F9NKaXyMU4pQbGpHHerssis9bnxdGEzWPCfO%2Bgyz86DsKYmcW4IHcteas6zmjXNUpQ4jd3wlVggXO9KDRQpI%2BrdOdime3IAtJzQEyRQB4aAnBGI%2FhTPU1WOvhhXaKVLYs2o3AKK1VOR2tQ0kDKwFDoW1dZk34wu0%2Bot3GC%2Fpr0qEydeK7gGrhcy2KyhVsX8nNmF2fzSCCjY9j9ohNY2HeOFsaI3D1w3UdJsHHJHwg2td8qFlv6oE7LVTJ%2FDAWA9qY7B0pRpVM5pN3LELTpajRwXcFBTDhfzx32pTEyjhgshIYfVz--j7bdiV4llk6YAi39--%2BTW2gfCnjp3maDqrtJVq5Q%3D%3D; domain=.qiita.com; path=/; expires=Sun, 16 Jun 2024 02:01:52 GMT; HttpOnly
< x-request-id: 191a2ada-ccc7-4a26-bcfc-e884ca7e1853
< x-runtime: 0.228379
< strict-transport-security: max-age=2592000
< 
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8" /><title>Qiita</title><meta content="Qiitaは、エンジニアに関する知識を記録・共有するためのサービスです。 プログラミングに関するTips、ノウハウ、メモを簡単に記録 &amp;amp; 公開することができます。" name="description" /><meta content="width=devic

先ほどのリクエストと同様に1行目がステータスライン、2行目〜がヘッダー、最終行がメッセージボディになります。ステータスラインでは200というステータスコードがレスポンスで帰ってきており、正常に通信されていることがわかります。ヘッダー部分にはアクセス日時、サーバの種類などが記載されています。メッセージボディにはHTMLが記載されています。
最後にこのHTMLを解析して、HTMLの中で参照されている、CSSファイルやJavaScriptファイルを読み込み最終的に指定されたWEBページを表示することができます。この仕組みはレンダリングと呼ばれており、奥深いので後日また勉強しようと思います。以上でWEBページが表示されるまでの仕組みを簡単にまとめました。最後まで読んでいただきありがとうございました。

参考

https://e-words.jp/w/DNS%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%B5%E3%83%BC%E3%83%90.html
https://teru1213.com/site-structure/#step3
https://www.kagoya.jp/howto/it-glossary/domain/dns-server/
https://www.youtube.com/watch?v=b_apIgHNqtk

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0