エンジニアとしてザコすぎるので1から勉強するンゴ
ブラウザでURLバーにアドレスを打ってから何が起こるのか
- まずはURLの解析が行われる
http://www.hogehoge.com/fuga
というURLがある
これは
http => プロトコル
www.hogehoge.com => サーバー名
/fuga => パス
という大まかに分けて3つに分類される
プロトコルは通信の方式
サーバー名はどのサーバーか
パスはサーバーの中のどのファイルorディレクトリか
を表す
次にブラウザはHTTPプロトコルを使用することがわかったのでHTTPリクエストを組み立てる
HTTPリクエストは以下の4つからなる
- リクエストライン
- メソッド
- 大まかにわけて以下の2つがある
- 取得するGET
- 送信するPOST
- 大まかにわけて以下の2つがある
- URI
- Webサーバーで動作するプログラムのファイル名
- HTTPバージョン
- その名の通り
- メソッド
- メッセージボディ
- メッセージの内容
そしてサーバーにこのリクエストを送るとサーバーからはレスポンスが返ってくる
- レスポンスライン
- HTTPバージョン
- その名の通り
- ステータスコード
- どんな状態かを端的に表す
- レスポンスフレーズ
- ステータスコードの内容を表す
- HTTPバージョン
- メッセージボディ
-
- メッセージの内容
-
ちなみに画像などがwebページに100個あったらこれらのリクエストは個別にサーバーに100個送られて個別にレスポンスが返ってくる
HTTPについてはこれでおしまい
つぎはサーバーに対してどうやってデータを送るか
サーバーに対してデータを送るにはIPアドレスというものが必要になる
IPアドレスとはPCの住所のようなもので
172.11.34.11みたいな .
が3つつくもの
各.
で繋がれた数字はすべて0~255の数字になる
アドレスを入力されたブラウザはどうやってhogehoge.comという文字列からこのIPアドレスを取得しているか?
それはDNSサーバーというPCの住所を知っているサーバーに対して「こいつのIPアドレスはなんですか?」と訪ねて、もしそのDNSサーバーが知っていたら「こいつのIPアドレスはXXXX.XXXX.XXXX.XXXXですよ〜」と教えてくれる
これをDNSルックアップという
仕組みはシンプルで以下のような対応表が各DNSサーバーにあってサーバー名が各PCからわたってくるのでそれに対して一致するものがあれば返答してくれる
サーバー名 | タイプ | クライアントに返答する項目 |
---|---|---|
www.hogehoge.com | A | 123.234.211.111 |
www.google.com | A | 142.251.42.142 |
ちなみにターミナルで以下のように打つと
nslookup google.com
返ってくる
Non-authoritative answer:
Name: google.com
Address: 142.251.42.142
そして普通に142.251.42.142
をアドレスに打ち込むと普通にgoogleが表示される
余談
- DNSサーバーに尋ねるにはブラウザからは直接できないらしくてDNSリゾルバというブラウザとは別の仕組みを使用して尋ねるらしい
- そのDNSリゾルバも実はただ実行するだけのものらしくてプロトコル・スタックという通信するためのものに頼んでるらしい
DNSサーバーには対応表があってリクエストに一致するものがあれば返されるっていったけどないときはどうするねんってなると思うけどその時はDNSサーバーの中で一番上位の存在のルート・ドメインっていうDNSサーバーに聞くと解決する
DNSサーバーは階層構造になっていて
www.hogehoge.com.jp
というドメインがあるとして
wwwはhogehogeに属していて
hogehogeはcomに属していて
comはjpに属しているとみる
一番右のやつが一番でかくて左に行くにつれてどんどん規模が小さくなっていく
んで
ルートはcomとかjpとかukとかいうドメインを束ねている
jpはcomとかtokyoとかそういったドメインを束ねている
そのjpの中のcomの中のhogehogeの中にwwwというサーバーの実態がある
それでルートに聞くとまずjpにきいて、jpはcomに聞いてcomはhogehogeに聞いて結局hogehogeが「にwwwという実態がありましたー。こいつのIPアドレスはXXXX.XXXXX.XXXX.XXXXですー」っていう返答を返してくれる
ちなみにこんな感じで聞いていったけど結局どこにもなかったという場合も多々あり、そういうときは DNS_PROBE_FINISHED_NXDOMAIN
という返答が返ってくる
実際に
http://fjwlekjfwekl.com/ という適当なURLを打ったらこんな感じの画面になる
IPアドレスを調べることができたらやっとそのIPアドレスの相手(webサーバー)に対してHTTPリクエストを送ることができるようになる
(ただHTTPリクエストを呼ぶときもDNSのリクエストを送るみたいにプロトコル・スタックというハードウェア寄りの機構を呼ぶことになる)
HTTPリクエストとHTTPレスポンスをブラウザとサーバーの間で行ったり来たりさせるためにはブラウザとサーバーの間でデータの通り道を用意する必要がある