はじめに
HTTPリクエストと聞いて、「言葉は聞いたことがあってもいまいちよく分からない。」といった状況の人がいると思います。そのような方向けに今回はHTTPリクエストついてイメージで理解できるように解説します。
※かっこ内は、イメージしやすくするための翻訳みたいなものです。
HTTPとは何か?
HTTPとは、HyperText Transfer Protocol の略で、WebブラウザとWebサーバーの間で情報をやり取りするためのプロトコル(データの送受信の約束事)のことです。このHTTPがあることで、インターネット上の情報のやり取りが可能になります。HTTPには、クライアント(ブラウザ)が情報やリソースを要求するリクエストと、サーバーがクライアント(ブラウザ)のリクエストに応じて返すレスポンスがあります。
HTTPリクエスト
HTTPリクエストは、リクエストライン、ヘッダー、ボディの3つに分けられます。
リクエストライン
リクエストラインは、宛先に目的を伝える「手紙の宛名と件名」のようなものです。具体的には、メソッド(データをどのように扱いたいか)、ファイル名、HTTPのバージョンが記載されてます。
GET /index.html HTTP/1.1
例えば、上記のリクエストラインでは、HTTP/1.1(というバージョンを使って、)index.html(というファイルを)GET(取得したい)という意味です。
ヘッダー
ヘッダーは、コンテンツタイプ(受け入れることができるデータの種類)の指定やリクエスト先のホスト名(接続先の名前)の指定、クライアントのソフトウェアの情報などが含まれます。
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
例えば上記のヘッダーでは、
- www.example.comという宛先に接続します
- クライアントの情報は、Mozilla/5.0です
- HTML形式のコンテンツを受け入れます
- 英語(米国)を好み、それに次いで他の英語も受け入れることができます
- gzipやdeflate、br形式で圧縮されたデータを受け入れます
というような意味を持ちます。
ボディ
ボディは、リクエストの本文のようなようなものです。ウェブサイトのフォームに入力されたデータをサーバに送信したいときなどに使われます。GETメソッド(Webサイトを取得したい目的)では、ボディは必要ないので空です。
POST /posts HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 85
{
"title": "花火大会",
"content": "浴衣をきて花火大会に行った。かき氷がおいしかった。",
"author": "太郎"
}
上記は、POSTメソッド(データをサーバーに送信するという目的)を使って、ブログの記事を投稿する際のリクエストライン、ヘッダー、ボディです。ヘッダーの部分で、Content-Type: application/json
というのがありますね。これは、
- コンテンツタイプ(送信するデータの種類)は、JSON形式(データを名前と値のペアで表現する形式)です
という意味です。そのJSON形式というのがボディである{}で、このHTTPリクエストを送信することで、ブログに投稿をアップすることができます。
まとめ
HTTPリクエストは、WebブラウザとWebサーバーの間で情報をやり取りするための基本的な仕組みです。HTTPリクエストは以下の3つの部分で構成されています
リクエストライン
これは宛先に目的を伝える部分で、メソッド(データをどう扱いたいか)、ファイル名、HTTPのバージョンが含まれます。
ヘッダー
ヘッダーには、コンテンツタイプ、リクエスト先のホスト名、クライアントのソフトウェア情報などが含まれます。
ボディ
ボディはリクエストの本文で、フォームに入力されたデータをサーバーに送信する場合などに使用されます。GETメソッドでは通常空です。
HTTPリクエストを理解することで、Webブラウザがどのようにしてサーバーから情報を取得しているかを知ることができます。イメージしながら理解していきましょう。