当ブログサイトを含め世の中には様々なWebサイトがあり、閲覧、利用するのに必要不可欠なプロトコルが「HTTP」です。今回は「HTTP」基本的な解説と、「HTTP」を用いた「Webサイト監視」について解説します。
HTTPとは?
HTTPは”HyperText Transfer Protocol“の略で、主にWebサイトを利用する際に使用されるプロトコルです。WebブラウザのアドレスバーやURLにて「http://~」という表記を見たことはないでしょうか。
その「http://」の部分が、今回解説するHTTPを使用して通信しますという意味を示しています。
HTTPの通信はシンプルで、情報のやり取りはクライアントがリクエストを行い、サーバがレスポンスを返すという、1つのリクエストに対し1つのレスポンスを返すというルールになっています。
使用されるサーバー側の受信ポートは、TCP80番ポートがデフォルトとなります。
今や、割とお手軽にWebサイトを作成する事ができる為、個人・企業問わず様々なWebサイトが存在しており、皆様も日常的に閲覧、利用されている事が多いと思います。そこでの通信に使用されているのがHTTPである為、私たちに身近なプロトコルとも言えます。
ただしHTTPを使用して送受信されるデータは暗号化されておらず、セキュリティ性が低い為、昨今ではHTTPのWebサイトは見かけなくなり、大半がHTTPをSSL化したHTTPSのWebサイトが主となっています。
HTTPSについてはまたの機会に解説をしたいと思います。
HTTP通信の基本的な流れ
HTTP通信時の基本的な流れはWebサイトの閲覧を例とした場合、以下のようになります。
- ユーザがWebサイトを閲覧する為に、WebブラウザからURLを指定してアクセスを開始すると、Webブラウザを介してWebサーバへHTTPリクエストを発行
- WebサーバはHTTPリクエストを受信すると、該当のWebページを構築する為に必要な処理を行います
- 処理が終わったらWebサーバはHTTPレスポンスを返します。HTTPレスポンスには処理の結果とWebページの中身の情報などが含まれます
- Webブラウザは、WebサーバからのHTTPレスポンスを受信しページを表示します。
ここでやり取りは終了となります。
簡易的に図で表すと以下のようになります。
ここではWebサイトへのアクセス→Webページが正常に表示される、というパターンでの基本的な流れを簡易的に紹介しました。ただし、いつも正常という訳にはいかず、さまざまな要因によりページ情報を受け取れず失敗する場合があります。
要因については、HTTPレスポンスの中にあるHTTPステータスコードという情報で、ある程度の切り分けを行う事ができます。この次にHTTPレスポンスとHTTPステータスコードについて紹介をしたいと思います。
HTTPレスポンスとは?
HTTPレスポンスとは、HTTPリクエストに対して処理を行いクライアントに返すメッセージです。まず実際のレスポンス内容はどのようなものかを確認してみたいと思います。
検証として、WindowsServer2019にIIS(Webサーバの機能)を構築し、そこにcurl1コマンドを実行してみます。すると以下のようなレスポンスが返ってきます。
HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Tue, 26 Mar 2024 02:36:10 GMT
Accept-Ranges: bytes
ETag: "3298bb5c267fda1:0"
Server: Microsoft-IIS/10.0
Date: Tue, 26 Mar 2024 02:38:50 GMT
Content-Length: 703
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>IIS Windows Server</title>
<style type="text/css">
<!--
body {
color:#000000;
background-color:#0072C6;
margin:0;
}
#container {
margin-left:auto;
margin-right:auto;
text-align:center;
}
a img {
border:none;
}
-->
</style>
</head>
<body>
<div id="container">
<a href="http://go.microsoft.com/fwlink/?linkid=66138&clcid=0x409"><img src="iisstart.png" alt="IIS" width="960" height="600" /></a>
</div>
</body>
</html>
クライアントは上記の様なHTTPレスポンスを受信して、それを基にWebブラウザ上でページを表示しています。
また、HTTPレスポンスはHTTPステータスライン、HTTPレスポンスヘッダー、HTTPレスポンスボディの3つの要素で構成されています。
次に3つの要素について、上記のHTTPレスポンスを参照しながら紹介をいたします。
1.HTTPステータスライン(ステータスライン)
HTTPステータスラインにはHTTPのバージョン、HTTPステータスコード及び説明が書かれています。
上記HTTPレスポンスでは、1行目の「HTTP/1.1 200 OK」が該当し、”HTTP/1.1“がバージョンで、”200“がステータスコード、”OK“がステータスコードの説明となっており、正常に処理が行えた事を示しています。
2.HTTPレスポンスヘッダー(ヘッダー)
HTTPレスポンスヘッダーには、レスポンスするコンテンツ(Webページなど)についての追加情報(例えばコンテンツの種類や大きさなど)、またWebサーバ自身の情報やレスポンス日時などが書かれています。
各情報は、情報の項目を表す「フィールド名」、情報の内容を表す「値」がコロン区切りで書かれています。
上記HTTPレスポンスでは、2行目の「Content-Type: text/html」から8行目の「Content-Length: 703」までがHTTPレスポンスヘッダーに該当し、”Content-Type“及び”Content-Length“が「フィールド名」、”text/html“及び”703“が「値」となります。
3.HTTPレスポンスボディ(レスポンスボディ)
HTTPレスポンスボディには、クライアントがリクエストしたコンテンツの中身が書かれています。
クライアントよりWebページをリクエストした場合、返ってきたHTTPレスポンスボディの内容を基にWebブラウザ上でページを表示させます。
上記HTTPレスポンスでは、10行目の「<!DOCTYPE html~」から41行目の「</html>」までが該当します。
HTTPステータスコード
前述のHTTPステータスラインにて出てきましたが、HTTPステータスコードはHTTPリクエストに対する処理結果を3桁の番号で表します。これはRFC72312にて定義されているものとなります。
HTTPステータスコードは大きく5つのクラスに分かれており、それぞれ類似または関連性のある意味を持つ要因毎に纏められています。
5つのクラスと意味は以下となります。
- 100番台:HTTPリクエストに対し、処理がまだ継続されている事を表します。
- 200番台:HTTPリクエストを正しく受理、処理、レスポンスされた事を表します。
- 300番台:HTTPリクエストの完了に追加処理が必要という事を表します。
(主にリダイレクト時) - 400番台:HTTPリクエストに問題がある事を表します。(クライアント側のエラー)
- 500番台:HTTPリクエストを処理ができない事を表します。(サーバ側のエラー)
どのクラスか分かるだけでも、ある程度の状況把握には有効ですが、更に細かく見ると要因をより明確にできます。代表的なHTTPステータスコードを以下に紹介します。
HTTPステータスコード | 意味 |
---|---|
200 OK | リクエストが正常に処理できた |
202 Accepted | リクエストは受理したが、処理が完了していない |
301 Moved Permanently | 恒久的に移転している |
302 Found | 一時的に移動している |
308 Permanent Redirect | 恒久的リダイレクト |
403 Forbidden | アクセスの拒否、アクセスが禁止されている |
404 Not Found | 未検出、リソースやページが見つからない |
500 Internal Server Error | サーバ内部のエラー |
503 Service Unavailable | サービス利用不可、サーバの高負荷やメンテナンス中などで、 一時的に利用できない |
HTTPステータスコードを普段目にする事はあまりないと思います。例えばWebブラウザにて対象のページが表示される度に”リクエストされたページの表示に成功しました!HTTPステータスコードは200です!“というようなメッセージが表示されれば認識はできますが、基本的にはそんな事はありません。(意図的にそのように表示をさせるようなサイトはあるかもしれないですが)
ただ、Webサーバ側でエラーページを用意している場合は目にする機会もあるかもしれません。
HTTPレスポンス内容例の検証にて使用したWindowsServer2019に対して、存在しないファイル名を指定するURLでアクセスをしてみると、Webブラウザ上で以下のようなページが表示されます。
これはWindowServer2019(Webサーバ)側で、HTTPステータスコードが”404“の際に上記エラーページを返すように設定されている為です。エラー判定時、このページの様にHTTPステータスコードを記載したページ情報が返される場合もあります。
(完全な余談ですが、一昔前は404エラーと言えば謎のお姉さんが有名でしたね)
Webサイト監視について
ここからは、HTTPを使用したWebサイト監視とはどういうものか、またその必要性について解説をしたいと思います。
Webサイト監視とは
まずWebサイト監視とは、定期的に指定されたWebサイト(URL)へHTTPリクエストを行い、正常に稼働しているかを確認する監視手法です。この事からHTTP監視、またはURL監視と呼ばれます。
WebサイトやWebサービスを運用する際には「ユーザーが接続できない」、「サービスを満足に利用できない」というような状況を作らない事が重要ですが、それは現実的には難しい事です。
ただ、もしそんな状況になっても、素早く異常を検知し対処を行う事で損失も少なく済みます。その為に定期的なWebサイト監視が必要となります。
Webサイト監視が必要になるケース
基本的に、外部に公開しているWebサイトには全て監視を行っていた方が良いと言われています。
特にECサイトや、業務やシステムに関わるサイトなどの障害は、直接的な被害が予想される為、監視を行っていた方がメリットとなる可能性が高いです。
上記Webサイト以外でも、監視を行う事でトラブルの早期解決、顧客満足度の向上に繋がる可能性は高くなります。
Webサイト監視にはどのようなものがあるか
ここではWebサイト監視の内容について一例を紹介します。
応答確認・HTTPステータスコード
大前提として、Webサーバから応答が無ければWebサイトを利用する事はできません。その為、応答確認は基本的な監視の一つとなります。
もう一つは前述のHTTPステータスコードで判別です。応答があったとしても何らかのエラーによりWebページが表示できない、または必要な情報が貰えていないと意味がない為、HTTPステータスコード”200″を取得できるか確認が必要です。
応答時間
Webサイトへのアクセスができる事、また正常にWebページが表示できる事以外に、Webサーバからの応答時間も大事になってきます。ユーザがWebサイトへのアクセスを開始してから、応答を得られるまでの時間が長いとユーザの満足度低下に繋がります。
定期的な応答時間の監視にて、常に同じ様な時間で応答を得られているか確認する事は重要です。もしWebサーバのトラブルやネットワーク負荷などにより、常時より応答時間が遅くなるような状況が発生しても、素早く検知する事ができます。
改ざん確認
Webページの改ざん確認も監視内容の一つになります。例えば悪意を持った攻撃者によりWebサイトを改ざんされた場合、様々な被害が考えられ、その影響範囲はサイト運営者のみならずユーザーにも及ぼす危険性があります。
その為、運営者が意図していない改ざんが行われていないかの監視を行う事は非常に重要となります。
Webサイト監視を行う方法
Webサイトの正常性を確認する場合、明確で分かりやすいのはWebブラウザからアクセスをする事が一番だと思います。Webブラウザの大半には開発者ツールというものがあり、そちらを使用すればHTTPレスポンスの内容も確認できますので、それで事足りる場合もあると思います。
ただし手動での確認になるので、監視対象とするWebページが増えれば増えるほど、頻度を高める事が難しく、また時間的な限界がある為、監視ツールが活用されています。
NetKids iMarkではここまで紹介した、Webサイト監視を行う機能を有しています。
次の記事では、iMarkを使ってWebサイト監視の為の設定をしてみたいと思います。
まとめ
今回は日常的に触れる機会が多い媒体であるWebサイトやWebサービスを中心に、HTTPの基本的な情報とWebサイト監視について解説をしてきました。HTTPは閲覧や利用だけではなく、監視を目的とした使い方もできるプロトコルとなります。
ただし今回だけでは、まだまだ解説しきれていない部分がありますので、いつかの機会に紹介ができればと思います。
コメント