HTTP
Webページの取得やデータの送信などに使うアプリケーション層プロトコル。ブラウザなどのクライアントが要求を送り、サーバが応答を返す形で通信する。
イマシルちゃんの解説
HTTPは、ブラウザなどのアプリがWebのデータをやり取りするためのプロトコルだよ。
ページを開くときは、ブラウザが欲しいページを指定した「リクエスト」という要求を送るんだ。
受け取ったWebサーバは、その要求に対する応答である「レスポンス」を返すよ。
応答にはページの内容だけでなく、見つかったかどうかなどの処理結果も含まれるんだ。
ページを受け取るだけでなく、フォームに入力したデータを送るときにも使うよ。
要求と応答の意味を共通のルールにすることで、異なるアプリ同士でもやり取りできるんだね。
この解説はわかりやすかったですか?
より深い解説
定義
HTTP(Hypertext Transfer Protocol)は、Webで使われるアプリケーション層のプロトコルである。クライアント(ブラウザなど)がリクエストを送り、サーバがレスポンスを返す。標準のポート番号はHTTPが80、TLSで暗号化したHTTPSが443である。
HTTP/1.1とHTTP/2はTCPを使う。これらで通常のHTTPSへ接続する場合、Webサーバの待受先はTCPの443番である。一方、HTTP/3はQUICを使うため、一般的なHTTPSの待受先もUDPの443番になる。ポート番号だけでなく、HTTPのバージョンとトランスポートを合わせて確認する。
要求をまたいで状態を管理する
HTTPはステートレスなプロトコルで、サーバは1つ1つのリクエストを独立したものとして扱い、前のリクエストの内容を覚えていない。ログイン状態のように、複数のリクエストにまたがる情報を保つには、CookieにセッションIDを入れて毎回送るなどの仕組みを使う。
バージョンごとの違い
| バージョン | 主な特徴 |
|---|---|
| HTTP/1.0 | 標準では1回の要求・応答ごとにTCP接続を閉じる |
| HTTP/1.1 | 接続を使い回す持続的接続(キープアライブ)が標準。Hostヘッダが必須になり、1つのIPアドレスで複数のサイトを運用できる |
| HTTP/2 | テキストではなくバイナリで送る。1つの接続で複数のリクエストを同時に流す多重化、ヘッダの圧縮 |
| HTTP/3 | TCPではなく、UDPの上で動くQUICを使う。パケット損失の影響を受けにくく、接続も速い |
メソッド
リクエストの目的は、メソッドで示す。
| メソッド | 目的 |
|---|---|
| GET | リソースを取得する |
| POST | データを送信して処理させる |
| HEAD | GETと同じだが、ヘッダだけを返させる |
| PUT | リソースを作成・置き換える |
| DELETE | リソースを削除する |
| OPTIONS | 使えるメソッドなどを問い合わせる |
| CONNECT | プロキシにトンネルを作らせる。プロキシ経由でHTTPS通信をするときに使う |
ステータスコード
レスポンスの結果は、3桁のステータスコードで示す。先頭の数字で大まかな意味がわかる。
| 分類 | 意味 | 代表例 |
|---|---|---|
| 1xx | 情報 | 100 Continue |
| 2xx | 成功 | 200 OK |
| 3xx | リダイレクト | 301 Moved Permanently、302 Found、304 Not Modified |
| 4xx | クライアント側のエラー | 401 Unauthorized、403 Forbidden、404 Not Found |
| 5xx | サーバ側のエラー | 500 Internal Server Error、503 Service Unavailable |
200 OKは、その要求を正常に処理したことを示す。例えばGETへの応答なら、通常は取得したリソースの表現を本文に載せる。死活監視で成功条件として使う場合は、確認するURLや本文の内容も設計する。一つのURLが成功しただけで、サービスの全機能が正常だと保証されるわけではない。
301は恒久的な移転、302は一時的な移転を示す。移転先はLocationヘッダーで通知する。3xxでも304はキャッシュ済みの表現を再利用できることを示す応答であり、別URLへの移動を求めるものではない。
実装の必須性と処理の呼出し
RFC 2616及びRFC 9110では、汎用HTTPサーバにGETとHEADの実装を必須とし、それ以外のメソッドは任意としている。これは、すべての資源でどのメソッドも受け付ける、という意味ではない。
| 観点 | GET | POST |
|---|---|---|
| 通信の方向 | クライアントからの要求 | クライアントからの要求 |
| 主な意味 | 表現の取得 | 資源に応じた処理の要求 |
| 動的な処理 | サーバのプログラムを実行して応答できる | サーバのプログラムを実行して応答できる |
| 応答のキャッシュ | 応答の条件に従って利用できる | 明示的な条件を満たす場合に利用できる |
CGIは、Webサーバから外部プログラムへ処理を渡すためのインタフェースである。GETでもPOSTでも呼出しに利用できるため、「GETではプログラムを動かせない」とは言えない。
POSTの応答は、常にキャッシュできるわけでも、規格上絶対にキャッシュできないわけでもない。RFC 9110では、明示的な鮮度情報と、要求先URIに一致するContent-Locationが必要であり、その応答を後続のGETやHEADへ再利用できる条件を定めている。
参考資料
実際の試験ではここに出る!全22問
ネットワークスペシャリスト
- 午前Ⅱ
- 午後Ⅰ
- 午後Ⅱ