HOME > 記事一覧 > Web開発 > Web基礎知識 > HTTPメッセージとは?【情報のやり取りの基本】

HTTPメッセージとは?【情報のやり取りの基本】

※ このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。

この記事ではHTTPメッセージについて解説します。
リクエストメッセージとレスポンスメッセージをまとめてHTTPメッセージと言います。
HTTPメッセージを理解すると、ブラウザとWebサーバー間でどのような情報がやり取りされているのかを知ることができます。

HTTPがどのようなものかわからない方は、まずは以下の記事を読んでみてください。

HTTPとは?【サーバー/ブラウザ間の通信手段】

HTTPとは?【サーバー/ブラウザ間の通信手段】

リクエストメッセージ

ブラウザからWebサーバーに送信するリクエストメッセージについて解説します。
今回はこのページ(https://umi-notes.com/http-message/)を例にとって説明します。

リクエストメッセージは次のようになっています。

GET /http-message/ HTTP/2
Host: umi-notes.com
User-Agent: curl/8.9.1
Accept: */*

なお、リクエストメッセージとレスポンスメッセージは、curlコマンドでvオプションを指定することで確認できます。実際に自分で他のページのメッセージを確認してみましょう。

リクエストライン

GET /http-message/ HTTP/2

リクエストメッセージの1行目をリクエストラインと言います。
ここでは、HTTPメソッド、URIのパス、プロトコルのバージョン番号を指定します。

プロトコルがわからない人は次の記事を読んでみてください。

【ネットワーク】プロトコルとは?

【ネットワーク】プロトコルとは?


今回の例では次のようになっています。


  • HTTPメソッド:GET
  • URIのパス:/http-message/
  • プロトコルのバージョン番号:HTTP/2


今回の例では、GETメソッドを使ってHTTPのバージョン2で送信することになります。

HTTPメソッドとは
HTTPメソッドでは、クライアントが行いたい処理を指定します。
HTTPメソッドには次のようなものがあります。


  • GET:リソースの取得
  • POST:サーバー上の状態を変更
  • PUT:リソースの更新、リソースの作成
  • DELETE:リソースの削除
  • HEAD:リソースのヘッダの取得
  • OPTIONS:リソースの通信オプションを取得
  • TRACE:自分宛にリクエストメッセージを返す試験
  • CONNECT:プロキシ動作のトンネル接続への変更


今回の場合は、GETによりリソースの取得処理を指定しています。

リクエストラインにはURIフラグメントを除いたパス以降の文字列が入ります。
ポート番号は、Hostヘッダで指定します。(今回は、ポート番号は省略され、デフォルト値になっています。)

この辺りのURIの内容がわからない方は以下の記事を参考にしてください。

URIとは?【Web上のリソースの指定方法】

URIとは?【Web上のリソースの指定方法】


また、リクエストURIは、絶対URIにすることもできます。
絶対URIを用いる場合のリクエストラインは次のようになります。

GET https://umi-notes.com/http-message/ HTTP/2

リクエストヘッダ

Host: umi-notes.com
User-Agent: curl/8.9.1
Accept: */*

リクエストメッセージの2行目以降をリクエストヘッダと言います。

リクエストヘッダでは、リクエストに関連する情報を記述しています。この情報をメタデータと言います。メタデータは、データを記述するデータ、データについてのデータのことです。

各ヘッダは「名前:値」という構成をしていて、1つメッセージで複数のヘッダを持つことができます。
今回の例のリクエストヘッダの一つ目を見ると、「Host」が名前、「umi-notes.com」が値となっています。

Hostではサーバーのドメイン名を指定します。User-Agentでクライアントの種類を表しています。

リクエストボディ

今回の例ではありませんが、リクエストヘッダの後に1行空の行を挟んでリクエストボディが続くこともあります。
リクエストボディには、そのメッセージを表す本質的な情報が入ります。POSTメソッドで送信するときは、ここにデータ本体が入ります。

レスポンスメッセージ

ブラウザがWebサーバーから受信するレスポンスメッセージについて解説します。
リクエストメッセージと同様に、このページ(https://umi-notes.com/http-message/)を例にとって説明します。

レスポンスメッセージは次のようになっています。

HTTP/2 200 OK
server: nginx
date: Sat, 01 Feb 2025 07:51:14 GMT
content-type: text/html; charset=UTF-8

<!DOCTYPE html>
<html lang="ja">
(省略)
</html>

ステータスライン

HTTP/2 200 OK

レスポンスメッセージの1行目をステータスラインと言います。
ここでは、プロトコルのバージョン、ステータスコード、テキストフレーズを指定します。

今回の例では次のようになっています。


  • プロトコルのバージョン:HTTP/2
  • ステータスコード:200
  • テキストフレーズ:OK


ステータスコードで処理結果の状態を数値として表します。
例えば、「200」は正常、「400」はリクエストで指定したリソースが存在しなかったとなります。

テキストフレーズは処理結果の状態をテキストとして表します。

レスポンスヘッダ

server: nginx
date: Sat, 01 Feb 2025 07:51:14 GMT
content-type: text/html; charset=UTF-8

レスポンスメッセージの2行目以降をレスポンスヘッダと言います。

レスポンスヘッダでは、レスポンスに関連する情報を記述しています。

各ヘッダはリクエストヘッダと同様に、「名前:値」という構成をしていて、1つメッセージで複数のヘッダを持つことができます。

今回の例では、content-typeヘッダでデータの種類がHTMLで、その文字エンコーディング方法がUTF-8であることがわかります。

レスポンスボディ

<!DOCTYPE html>
<html lang="ja">
(省略)
</html>

レスポンスヘッダの後に1行空の行を挟んでレスポンスボディが続きます。
この例では、WebページをHTMLで記述しています。

HTTPメッセージの構造

1行目はスタートラインと言います。スタートラインは、リクエストライン、ステータスラインに該当します。

スタートラインに続いて、ヘッダが来ます。ヘッダの終了は空行で識別します。ヘッダは省略することもできます。

ヘッダに続けてボディを持つこともできます。ボディも省略が可能です。

まとめ

この記事では、ブラウザとWebサーバー間でやり取りされている情報を理解するのに必要なHTTPメッセージについて解説しました。

HTTPメッセージを理解することで、どのようなエラーが起きているのかも知ることができます。
その理解に必要なHTTPメソッドやステータスコードも詳しく学んでみましょう。

このブログだけでもWebの基礎知識を網羅的に学べますが、本で学びたい方にはこちらがおすすめです!


おすすめ記事

計算量とは?【アルゴリズムに必須】

計算量とは?【アルゴリズムに必須】

HTTPメッセージとは?【情報のやり取りの基本】

HTTPメッセージとは?【情報のやり取りの基本】

URIとは?【Web上のリソースの指定方法】

URIとは?【Web上のリソースの指定方法】

Webの全体像【エンジニアに必須】

Webの全体像【エンジニアに必須】

HTTPとは?【サーバー/ブラウザ間の通信手段】

HTTPとは?【サーバー/ブラウザ間の通信手段】