HTTP

読み:えいちてぃーてぃーぴー / 英語表記:Hypertext Transfer Protocol

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/3TCPではなく、UDPの上で動くQUICを使う。パケット損失の影響を受けにくく、接続も速い

メソッド

リクエストの目的は、メソッドで示す。

メソッド目的
GETリソースを取得する
POSTデータを送信して処理させる
HEADGETと同じだが、ヘッダだけを返させる
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の実装を必須とし、それ以外のメソッドは任意としている。これは、すべての資源でどのメソッドも受け付ける、という意味ではない。

観点GETPOST
通信の方向クライアントからの要求クライアントからの要求
主な意味表現の取得資源に応じた処理の要求
動的な処理サーバのプログラムを実行して応答できるサーバのプログラムを実行して応答できる
応答のキャッシュ応答の条件に従って利用できる明示的な条件を満たす場合に利用できる

CGIは、Webサーバから外部プログラムへ処理を渡すためのインタフェースである。GETでもPOSTでも呼出しに利用できるため、「GETではプログラムを動かせない」とは言えない。

POSTの応答は、常にキャッシュできるわけでも、規格上絶対にキャッシュできないわけでもない。RFC 9110では、明示的な鮮度情報と、要求先URIに一致するContent-Locationが必要であり、その応答を後続のGETやHEADへ再利用できる条件を定めている。

参考資料

実際の試験ではここに出る!全22問

ネットワークスペシャリスト

午前Ⅱ
午後Ⅰ
午後Ⅱ

この用語が出てくる記事

↑