目的
「ネットワークはなぜつながるのか」を読んだ後にアウトプットするため、今回第一章。
まとめ
この章ではwebブラウザーにURLを入力した後のwebサーバやDNSサーバの振る舞い、httpプロトコルの概要などの話が主題。
ブラウザーはまずurlを解読する。
例えば、"http://www.p49e.com/somepage.html"とあれば 「httpプロトコルを使用してp49e.comというサーバのsomepage.htmlのファイルを開く」と解釈する。 なお、p49e.comはドメイン名なのでIPアドレスに変えてもアクセスすることができる。(このページもローカルネットワークではIPベタ打ちでいける)
ブラウザーはwebサーバにリクエストを送る
解釈した後は実際にファイルを探して開く。 httpプロトコルでの通信には「何を(URI)」「どうする(メソッド)」のかをwebサーバとやりとりする必要がある。 URIにはファイル名やURLが含まれる。 メソッドには主に以下のメソッドがある。
- GETメソッド その名の通りURLで指定した情報を取り出す
- POSTメソッド 主にフォームの内容をサーバに送信する時に使われる。
どちらもサーバにリクエストを送信するので振る舞いはたいして変わらない。 しかし、GETメソッドはURLの情報をやり取りするのでURLで内容が把握できる。 露呈して困るような情報のやり取りではGETよりPOSTメソッドの方がセキュア。
他にもDELETEメソッドなどあるがここでは割愛する。(当ブログでは記事の削除にDELETEメソッドを使っている)
リクエストを送るとレスポンスが返ってくる
リクエストしたのでレスポンスが返ってくる。 httpプロトコルではステータスコードという形でやりとりの結果を把握できる。 404 Not Foundなどがよくある例 以下に主なステータスコードを示す。
- 1xx 処理の状況などを通知する。
- 2xx 正常終了。
- 3xx 追加で操作が必要である。
- 4xx クライアントのエラー(自分のせい)
- 5xx サーバのエラー(相手のせい)
リクエスト時のメッセージ作成
webサーバにリクエストを送るにはhttpプロトコルに沿った リクエストメッセージを送らないといけない。
主にメッセージライン、メッセージヘッダー、メッセージボディからなる。
メッセージライン
1行目でURIやhttpバージョン、メソッドなど 「何」を「どうする」かを書いている
メッセージヘッダー
メッセージライン以外で必要になる情報が書いてある。開発者用ツールだとNetwork -> Headersで見れる
メッセージボディ
ヘッダーでも書けない情報を書くところ。POSTメソッドの時によく使う(バレたらまずい情報)
あとはIPアドレスからDNSサーバーを辿って解決する
socketというライブラリがDNSリゾルバを提供しているので、ブラウザはリゾルバでIPを調べる。 調べたIPアドレスを使ってプロトコルスタックに依頼をし、webサーバーが解答(webページ)を返す。