HTTPリクエスト
HTTPでクライアントがサーバに送る要求のメッセージ。リクエスト行、ヘッダー、空行、メッセージボディの順に並ぶ。
イマシルちゃんの解説
ブラウザがサーバに送る「お願いの手紙」には、決まった書き方があるんだ。
1行目に「何をしてほしいか」、続けて「補足の情報」、1行あけて「一緒に送る中身」。
手紙の宛名、追伸、同封物みたいな感じで、順番がきっちり決まってるんだよ!
より深い解説
構造
HTTP/1.1のリクエストメッセージは、次の順で並ぶテキストである。
| 部分 | 内容 |
|---|---|
| リクエスト行 | メソッド、リクエスト対象(パスなど)、HTTPのバージョン |
| ヘッダー | Host、User-Agent、Content-Typeなどの付加情報。1行に1つ |
| 空行 | ヘッダーの終わりを示す(改行だけの行) |
| メッセージボディ | サーバに送るデータ本体。ない場合もある |
具体例
GETメソッドで検索キーワードを送る場合:
GET /search?q=network HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
POSTメソッドでフォームの内容を送る場合:
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
user=glatch&password=secret
フォームに入力したデータは、GETメソッドではリクエスト行のURLの末尾(クエリ文字列)に、POSTメソッドではメッセージボディに入る。
押さえておきたいヘッダー
| ヘッダー | 内容 |
|---|---|
| Host | 接続先のホスト名。HTTP/1.1では必須。1台のサーバで複数のサイトを動かす(バーチャルホスト)ために使われる |
| Content-Type | ボディのデータ形式 |
| Content-Length | ボディの長さ(バイト数) |
| Cookie | サーバから受け取ったCookieを送り返す |
| Referer | どのページのリンクから来たか |
| Authorization | 認証情報 |
レスポンスメッセージとの違い
サーバが返すレスポンスメッセージも同じ形だが、1行目がリクエスト行ではなくステータス行(バージョン、ステータスコード、理由句。例:HTTP/1.1 200 OK)になる。
HTTP/2以降では、メッセージをテキストのまま送らず、バイナリのフレームに分けて送る。ただし、メソッド、ヘッダー、ボディという論理的な構成は同じである。