HTTPメッセージ【HTTP message】
概要
HTTPメッセージは、Webブラウザなどのクライアントがサーバに処理を要求する「HTTPリクエスト」と、Webサーバがその結果を返す「HTTPレスポンス」の二種類に大別される。例えば、利用者がWebページのURLを入力すると、ブラウザはサーバに対してリクエストを送信し、サーバは要求されたHTML文書や画像などのデータをレスポンスとして返す。このような一連のやり取りによってWebページの表示が実現される。
HTTPメッセージの構造
HTTPメッセージは原則としてテキスト形式で記述され、主に三つの部分で構成される。最初の行には要求の種類や応答の結果を示す開始行(スタートライン)があり、続いて、通信条件やデータの種類などを示すヘッダフィールドが並ぶ。その後、空行をはさんで必要に応じて本文(メッセージボディ)が付加され、HTML文書やJSONデータ、画像データなどの実際の伝送内容が格納される。
スタートライン
メッセージ冒頭の1行(最初の改行コードまで)であるスタートラインは、相手方に要件を簡潔に伝える行である。リクエストとレスポンスで記載内容が異なり、リクエストでは「GET /index.html HTTP/1.1」のように、HTTPメソッド(GETやPOSTなど)、リクエストURL、HTTPバージョンが記載される。レスポンスでは「HTTP/1.1 200 OK」のように、HTTPバージョン、ステータスコード(200や404など)、理由フレーズ(OKやNot Foundなど)が記載される。
HTTPヘッダ
ヘッダ領域には、メッセージについての制御情報(メタ情報)を、「Content-Type: text/html」といったように項目名(キー)と値のペアとして列挙する。コンテンツの種類を示す「Content-Type:」、データのサイズを示す「Content-Length:」、キャッシュの制御を指示する「Cache-Control:」、認証情報を示す「Authorization:」など、様々な情報をヘッダフィールドとして付加できる。ヘッダの後には必ず空行が置かれ、これがヘッダ部とボディ部の区切りとして機能する。
HTTPボディ
ボディ部はメッセージの本文にあたる部分であり、実際に送受信されるデータが格納される。リクエストの場合、フォームの入力値やJSONデータ、アップロードするファイルなど、クライアントからサーバにPOSTメソッドなどで送る内容が記載される。GETメソッドのようにボディを持たないメッセージも存在する。レスポンスの場合はサーバがクライアントに提供する実際の内容、すなわち、HTMLのソースコード、画像データ、APIの返却値などが格納される。
バージョンによる違い
HTTP/1.1まではHTTPメッセージはテキスト形式で記述されており、人間が直接読み書きできる構造になっている。HTTP/2以降では伝送時にバイナリ形式に変換され、ヘッダ部はヘッダ圧縮(HPACK/QPACK)が行われるが、メッセージの論理構造や記述形式は引き継がれており、開発ツールなどでは従来のテキスト形式に変換して表示される。
