031.3 HTTPの基礎
Web Development Essentials | 2024/01/12

HTTPの通信の仕組み

HTTPの通信において、クライアント(Webブラウザ)からWebサーバにリクエストすることをHTTPリクエストと呼び、WebサーバからWebブラウザにレスポンスすることをHTTPレスポンスと呼びます。ユーザーはHTTPの通信を使用し、様々なWebコンテンツを楽しむことが出来ます。本章では、HTTPの通信で使われる様々な仕組みについて説明していきます。

先ずはHTTPリクエストで使用する「GETメソッド」「POSTメソッド」について紹介します。

GETメソッド(方式)

GETメソッドはWebブラウザからWebサーバに送るHTTPリクエストのメソッドの一種です。メソッドとはHTTPの通信を行う方式です。ブラウザが、Webサーバから閲覧したいページ(データ)を取得(GET)するために、リクエストする際に使用されるメソッドです。

また、URLの末尾にクエリパラメータを指定してWebサーバにデータを送信することも可能です。クエリパラメータを指定することで、クライアントはWebサーバに対して特定のデータを送信出来ます。

【?】はパラメータの初めを意味しており、【パラメータ名=値】という形で記述します。また【&】で値を区切ると複数のパラメータを同時にWebサーバに渡すことが出来ます。上記例では、パラメータ名「name」では「yamada」という値を、パラメータ名「address」では「osaka」という値を渡している事になります。

GETメソッドの問題点

GETメソッドはデータをURLの一部として送信するため、URLの中に送信したい内容が表示されてしまいます。上記のようなページにアクセスするには問題ないのですが、ご自身の住所や名前がURLとして表示されたらどうでしょう。URLはコピーしてペーストすれば簡単に共有する事が出来てしまう為、URL上に誤って個人情報やパスワードが記載されてしまうと大変問題となります。このような場合はHTTPリクエストのPOSTメソッドを使用します。

POSTメソッド(方式) 

POSTメソッドもWebブラウザからWebサーバに送るHTTPリクエストのメソッドの一種です。GETメソッドが閲覧したいものを要求するために使用するメソッドであるのに対し、POSTメソッドは、Webサーバにデータを送信(POST)したいときに使用するメソッドです。例えば、入力フォームや掲示板への書き込みや、ファイルをアップロードする場合に使用します。

また、POSTメソッドを使用する場合は、クエリパラメータをURLに表示せず、メッセージボディに見せたくない情報を格納してWebサーバにデータを送信することができます。そのため個人情報(パスワードやカード情報)等のデータを送信する場合はPOSTメソッドが適切です。

本章では、HTTPリクエストのメソッド(GETメソッド・POSTメソッド)の使い分けについて問われやすいと思います。また、クエリパラメータの書式も重要な項目ですので、覚えておきましょう。

続いて「HTTPリクエスト」と「HTTPレスポンス」の構成について説明します。「GETメソッド」と「POSTメソッド」がどこで使用されているか、注目してみましょう!

HTTPリクエスト

HTTPリクエストは「リクエスト行」「ヘッダー」「メッセージボディ」の3つの要素から構成されており、Webサーバに送信されています。

HTTPレスポンス

HTTPレスポンスは「ステータス行」「ヘッダー」「メッセージボディ」の3つの要素から構成されています。

ステータス行に表示される3桁の数字をステータスコードと呼びます。参考例では、200と記述されているものです。ステータスコードは100番台から500番台までの5つのクラスから構成されており、ステータスコードの1桁目の数値がレスポンスの種類を表します。

本章ではHTTPリクエスト・HTTPレスポンスの構成やステータスコードの番号と内容について問われやすいかなと思います。またHTTPリクエストの構成図にあるヘッダーの「HOST」や「User-Agent」等のフィールド名の詳細について問われることは無いかなと思うので省略していますが、フィールド名は他にも沢山の種類があるので、気になる方はご自身で調べてみてくださいね!

Webアクセスで使われている技術

ITの進歩に伴い、定期的にWebブラウザのアップデートも行われています。現在のWebブラウザでは安全にWebサイトにアクセスする機能や、ユーザーが快適にWebコンテンツを楽しむ機能が実装されています。

本章ではWebアクセスについて問われやすい項目について紹介していきます。

キャッシュ

WebブラウザからWebページを表示するとき、Webサーバからレスポンスされたファイル(HTML、CSS、JavaScript等)のダウンロードが必要となります。この動作には2つの問題点があります。

  1. インターネット回線が遅い場合、ファイルのダウンロードに時間がかかり、ページの表示が遅れてしまうこと。
  2. Webサイトにアクセスする度にダウンロードが発生するので、ダウンロード数が増えることでネットワークの帯域幅を占有してしてしまうこと。 

この問題を解決するために、キャッシュというブラウザ機能が誕生しました。キャッシュはWebサーバからダウンロードしたデータをローカル(自分のコンピュータやスマートフォン等)に保存し、一度表示したWebページにアクセスした場合、2回目以降はローカルからそのデータを使用し表示します。そのため、Webサーバからファイルの再ダウンロードが行われず、ネットワークの混雑が軽減されます。しかし、Webページが更新されている場合、新しくWebサーバからファイルのダウンロードが行われることを覚えておきましょう。

Cookie

キャッシュと似たような仕組みとして、Cookieがあります。大きな違いとしてCookieはアクセスしたWebサイトのログイン情報(閲覧履歴や入力情報、ショッピングサイトの購入履歴)等を一時的にWebブラウザに保持します。もしログイン情報が保存されていれば、何度も訪れるWebサイトで毎回同じIDとパスワードを入力する必要が無くなり、ユーザーにとって利便性の増す機能といえます。また、ユーザーがWebサイトを閲覧する際は、その行動履歴や閲覧した商品からユーザーの好みや興味を引く広告が表示されることがあります。これもCookieによるデータ保存が影響しています。

このように、Cookieはインターネットを快適に利用するうえで非常に便利ですが、セキュリティの侵害による情報漏洩やプライバシー面でリスクが伴います。そのためWebブラウザからCookieを使用してデータの保存を行うかどうかの設定をしたり、特定のWebサイトへのアクセスのみCookieを適用するなど、しっかり対策する必要があります。

キャッシュやCookieは機能が似ているため、試験問題として問われやすいかなと思います。それぞれの使用用途や特徴をしっかりと覚えて対策しましょう!

HTTPとTLS

HTTPはクライアントとサーバ間でやり取りを行う通信規約のことです。HTTPはデータをテキストのままでやり取りを行います。単純にWebページの表示の為に使用する点では問題はありませんが、個人情報(パスワードやカード情報)等を取り扱う場合は注意が必要です。HTTPを使用し情報のやり取りを行うと、ログイン時に使用するユーザーネームやパスワードもテキストで送信されてしまい、これを見た悪意のあるユーザーに不正アクセスされる可能性があります。このような重要な情報のやり取りを行う場合はデータを暗号化し、第三者が読み取れないように通信を行います。このような暗号化の仕組みをTLS(略称:Transport Layer Security)と呼び、この仕組みを使用したHTTPを、HTTPSと呼びます。

TCPとポート番号

インターネットで使用される通信規約の1つにTCP(Transmission Control Protocol)があります。TCPはコンピュータ間に通信経路を繋ぎ、通信を行います。またサービスの内容により番号が割り振られています。この番号のことをポート番号と呼びます。HTTPを使用した場合はTCP80番ポートが使用され、HTTPSではTCP443番ポートが使用されます。

HTTPの問題点や、HTTPSの特徴は問われやすいかなと思います。またHTTPとHTTPSのTCPポート番号についても重要な箇所となりますので、身に着けておきましょう!

Web Socket

HTTPはクライアントのリクエストに対しWebサーバがレスポンスを返すという、一方向の通信を行います。それに対し、必要に応じてWebサーバからクライアントに通信を行う双方向通信プロトコルのことをWeb Socketと呼びます。

双方向の通信の利点はリアルタイムで情報のやり取りが可能となる点です。例えば、チャットアプリのメッセージの送受信やWeb会議中のデータのやり取り等をリアルタイムで行うことが出来るようになります。

Web SocketはWebでのコミュニケーションが欠かせない技術として、幅広く取り入れられています。

URL

URL(略称: Uniform Resource Locator)は、Web上のリソース(Webページ、画像、動画等)の住所や場所を示したものです。URLは「スキーム」「ホスト名」「ドメイン名」から構成されています。

このURLの例ではスキームは、「http://」、ホスト名は「www」、ドメイン名は.「google.co.jp」に当たります。このホストとドメインを含む形式のことをFQDN(略称:Fully Qualified Domain Name)と呼びます。今回の例(www.google.co.jp)ではGoogleの提供するWebサーバ、つまりGoogleのWebサイトを表しています。

このように、人間が理解しやすい文字列として表示されているFQDNですが、コンピュータはこの文字列を理解しているわけではありません。コンピュータはIPアドレスを使って、情報のやり取りを行います。IPアドレスとはコンピュータやスマートフォンといったネットワーク上の機器に割り当てられる数値で構成された番号です。

各端末(コンピュータやスマートフォン)におけるIPアドレスはそれぞれ異なる数値を持ち合わせています。Webサイトを運営しているGoogleもネットワークに接続する専用のWebサーバを持ち合わせており、独自のIPアドレスを保有しています。しかし、IPアドレスは単なる文字の羅列である為、ユーザーにとっては覚えづらく、利用するには不便です。そのため、ユーザーはIPアドレスとドメイン名を紐づけた仕組みを利用してWebサイトにアクセスしています。この紐づけの仕組みをDNS(略称:Domain Name System)と呼びます。

具体的には、ユーザーがWebサイトにアクセスする際、ドメイン名やFQDNを入力すると、それをDNSが対応するIPアドレスに変換します。その後、Webサーバには変換されたIPアドレスを使ってリクエストが送られ、Webサイトはそのリクエストに応答してコンテンツを提供します。その為ユーザーはドメイン名を使って簡単にWebサイトにアクセスする事が出来ます。

ドキュメントルート

ドキュメントルートとは、Webサイトで公開されるHTMLファイルや画像などが配置された場所(ディレクトリ)です。クライアントはドキュメントルートより下の階層にあるファイルに対してアクセスすることが出来ます。ドキュメントルートは使用するWebサーバにより異なりますが、代表的なWebサーバ(次項にて紹介するApache HTTP Server)のデフォルトでのドキュメントルートは「var/www/html」というディレクトリが用意されており、このディレクトリ配下のファイルにアクセスすることが出来ます。

例えは、GoogleのURL(https://www.google.co.jp)にアクセスすると、ドキュメントルートの中にあるindex.htmlファイルがレスポンスされ、Googleのトップページが表示されます。多くのWebサイトのトップページはindex.htmlである為、Webブラウザはこの入力を省略してもアクセス出来る補完機能が実装されています。FQDNの後にスラッシュを入れてindex.htmlと入力した場合、Webページが表示されるということはドキュメントルート配下にindex.htmlファイルが存在するということです。

もしドキュメントルートにその他ファイル(etc.html)が存在する場合、FQDNの後に/etc.htmlと入力するとそのページが表示されます。また、ドキュメントルートに新しくディレクトリを作成して、階層付けを行うことも可能です。例えばnewsというディレクトリに、スポーツ情報を表示するsports.htmlファイルが存在する場合、「https://www.○○○.co.jp/news/sports.html」にアクセスすると、sports.htmlファイルがレスポンスされ、スポーツ情報のページが表示されます。

本章ではURLの構造と、ドキュメントルートの意味と使い方について問われやすいと思うので、しっかり理解しておきましょう!

HTTPサーバ

HTTPサーバとはHTTPプロトコルを使用して、通信を行うサーバのことで、一般的にはWebサーバのことを指し、Webサイトを構築するうえで必須のサーバです。HTTPサーバにはいくつか種類がありますが、代表的なHTTPサーバアプリケーションとして「Apache HTTP Server」や近年急速に需要を伸ばしている「Nginx」があります。

バーチャルホスト

バーチャルホストとは一台のWebサーバで複数のFQDNやドメインを運用する事が出来るサーバ技術の一種です。前述のとおり、各Webサーバは異なるIPアドレスを保有しており、1つのFQDNやドメインと紐づいています。その為、Webサーバを運営する場合、FQDNやドメインを同数以上のWebサーバを用意する必要がありましたが、バーチャルホストを利用することで一台のWebサーバで複数のドメインが使えるようになり、Webサーバの運用コストを抑える事が可能となりました。 バーチャルホストには「IPベースバーチャルホスト」と「名前ベースバーチャルホスト」の二種類が存在します。

IPベースバーチャルホスト

IPベースバーチャルホストはIPアドレスを変更する事で特定のWebページの表示を切り替えます。IPベースバーチャルホストは、1つのWebサーバに複数のIPアドレスを割り当て、それぞれの IPアドレスに対応したWebサイトを複数作成する事が出来ます。

例えば、クライアント1がwww.○○○.comにアクセスしたとき、IPアドレスは192.168.11.1に対応するため、「var/www/○○○.com」ディレクトリにあるデータが表示されます。クライアント2がwww.○○○.jpにアクセスしたとき、IPアドレスは192.168.11.2に対応するため、「var/www/○○○.jp」ディレクトリにあるデータが表示されます。

名前ベースバーチャルホスト

名前ベースバーチャルホストは複数のFQDNやドメインを1つのIPアドレスを使って公開する方法です。

クライアント1が、www.○○○.com にアクセスした時は、「var/www/○○○.com」ディレクトリにあるデータが表示されます。クライアント2がwww..○○○.jp にアクセスした時は、「var/www/○○○.jp」ディレクトリにあるデータが表示されます。名前ベースバーチャルホストでは、リクエスト時に含まれるHOST ヘッダーを参照し、ServerNameで設定したホスト名と一致するバーチャルホストを参照し、Webページの表示を切り替えます。

それでは、今回はここまで〜。

PAGE TOP