HTTPとは
HTTPは、Webサーバーと通信を行うときのプロトコルです。
WebはブラウザからWebサーバーにリクエストを投げてレスポンスを得るシステムですが、このとき通信の仕組みを支えているのがHTTPです。
HTTPはTCP/IPがベースとなっています。TCP/IPはインターネットで通信するときのプロトコルです。
HTTP通信の流れ
ブラウザとWebサーバー間の通信の流れはざっくりと以下のようになっています。
DNSによる名前解決
TCPによるコネクションの確立
リクエストとレスポンス
DNSによる名前解決
まず指定されたURIに関してDNSによる名前解決を行います。これによってリクエスト先を特定します。
具体的には、FQDN(ホスト名+ドメイン名)に該当するIPアドレスを取得します。
FQDNは、URIのうちの例えば、www.hogehoge.com
のような部分です。
DNSサーバーと通信してwww.hogehoge.com
のIPアドレスを取得します。
TCPによるコネクションの確立
続いて取得したIPアドレス先に対してTCPコネクションを確立します。
3ウェイハンドシェイクという手法を用いて「通信してもいいですか」「いいですよ」「わかりました」みたいなやりとりをします。
リクエストとレスポンス
コネクションが確立できたら、リクエストデータを送信します。
リクエストに応じて、レスポンスデータを返されます。
TCPによってデータ伝送時も送達確認がなされます。
データ量が多い場合はパケットを分けて送信します。
レスポンス「1つ目のパケットだよ。」
リクエスト「1つ目のパケットが届いたよ。2つ目を送って。」
レスポンス「2つ目のパケットだよ。」
リクエスト「2つ目のパケットが届いたよ。3つ目を送って。」
みたいなイメージのやりとりをします。
まとめ
ブラウザとWebサーバーの通信はHTTPで行う。
HTTP通信のざっくりとした流れは、
DNSによる名前解決
TCPによるコネクションの確立
リクエストとレスポンス
となります。
以下余談。
「Webサーバー」は「Webサーバーソフトウェア(Nginxなど)が起動しているコンピュータ」のことです。(NginxイコールWebサーバ
などと理解しているとネットワークの学習をしているときによくわからないことになります。)
DNSで名前解決したwww.hogehoge.com
のIPアドレスは「Webサーバーソフトウェア(Nginxなど)が起動しているコンピュータ」の住所です。そのコンピュータまでパケットが渡ったら、「80番のアプリケーション宛ですよ」と言った感じでポート番号で識別して「Webサーバーソフトウェア(Nginxなど)」にパケットが渡されます。