<#webadvjs#>

ピンボールアクエリオン

HTTPHypertext Transfer Protocol

HTTPとは、WebサーバWebクライアントの間でデータの送受信を行うために用いられるプロトコル(通信規約)。Webページを構成するHTMLファイルや、ページに関連付けられたスタイルシートスクリプト、画像、音声、動画などのファイルを、データ形式などのメタ情報を含めてやり取りすることができる。

 

HTTPはクライアントから要求(HTTPリクエスト)を送り、サーバが応答(HTTPレスポンス)を返すプル型リクエスト/レスポンス型)の通信を基本としており、WebブラウザWebクローラなどのクライアントから送信する要求の形式や、Webサーバからの応答の形式などを定めている。

HTTPリクエストおよびレスポンスは要求や返答の内容、資源の種類や形式などの情報、および関連する情報を記述した「ヘッダ部」(header)と、送受信する資源(ファイルなど)の本体である「ボディ部」(body)で構成される。ボディは基本的にはレスポンスに存在するが、クライアント側からデータを送信する際にはリクエストにも付加される。

HTTPは下位(トランスポート層)のプロトコルとして標準ではTCPを利用することが多いが、SSL/TLSを用いて暗号化されて伝送されることもある。この通信手順は「HTTP over SSL/TLS」と呼ばれ、URL/URIスキーム名として通常の「http:」に代えて「https:」を用いる。

Cookieによるセッション管理

HTTPそのものは複数回の通信をまたぐ状態の保存・管理を行わないステートレス型のシンプルなプロトコルだが、「Cookie」(クッキー)と呼ばれる拡張仕様により状態管理ができるようになっている。

Cookieはサーバがレスポンスヘッダの一部としてクライアントに送付する短い文字データで、クライアントはこれをストレージなどに恒久的(ただし有効期限が切れると消滅する)に保存する。次回サーバへリクエストを送付する際にはヘッダに前回受信したCookieの内容を書き入れて送信する。

サーバはCookieを参照することで個々のクライアントを識別・同定することができる。サーバとクライアントの間で何往復も繰り返しやり取りが必要な複雑な処理(セッション)を容易に実装することができ、間が空いてから再アクセスしてもサーバは相手がどのクライアントなのか見分けることができる。

認証方式

HTTPではクライアントを用いてアクセスしてきた利用者を識別・認証し、アクセス権限に応じたサービスを提供するため、認証手順(HTTP認証)についても定めている。当初規定されたのは単純にユーザー名とパスワードをやり取りする「基本認証」(BASIC認証)だが、パスワードが通信途上で盗聴される危険性に対処するためにチャレンジ/レスポンス認証の一種である「ダイジェスト認証」(Digest認証)が追加された。

現在では利用者の認証が必要な用途ではHTTP通信自体を丸ごと暗号化するSSL/TLSを用いるのが一般的となっており、認証機能もアプリケーション側で実装するようになったため、HTTP自体の認証機能はあまり使われなくなっている。

歴史

HTTPの最初のバージョン(HTTP/0.9)は、Webを考案したティム・バーナーズ・リー(Timothy J. Berners-Lee)氏らによって1991年に公表された。その後、インターネット関連技術の標準化を推進するIETF(Internet Engineering Task Force)によって標準化が進められ、1996年にHTTP/1.0(RFC 1945)が、1997年に改良版のHTTP/1.1(RFC 2068)が発行された。

現在最も普及しているのはこのHTTP/1.1で、2014年にRFC 7230〜7235として改訂された。2015年には互換性を維持しつつ大幅な機能強化を図ったHTTP/2が、2022年にはトランスポート層にQUICを統合したHTTP/3が標準化され、一部の仕様が大きく変更されている。

この分野の用語

他の辞典による解説 (外部サイト)

HTTPのステータスコード

▼ HTTP 1.0

2xx:Success (成功)
200OK成功
201Created作成完了
202Accepted受理
204No Content内容が空
3xx:Redirection (転送)
301Moved Permanently恒久的に移転
302Moved Temporarily一時的に移転
304Not Modified変更なし
4xx:Client Error (クライアントエラー)
400Bad Request不正なリクエスト
401Unauthorized未認証
403Forbiddenアクセス権がない
404Not Found存在しない
5xx:Server Error (サーバエラー)
500Internal Server Errorサーバ内部のエラー
501Not Implemented機能が未実装
502Bad Gateway中継サーバのエラー
503Service Unavailableサービス停止中
* HTTP 1.0では100番代は未割当

▼ HTTP 1.1

1xx:Informational (情報)
100Continue継続
101Switching Protocolsプロトコル切替
2xx:Success (成功)
200OK成功
201Created作成完了
202Accepted受理
203Non-Authoritative Information非公式な情報
204No Content内容が空
205Reset Content内容をリセット
206Partial Content内容の一部
3xx:Redirection (転送)
300Multiple Choices複数の候補がある
301Moved Permanently恒久的に移転
302Found別の場所で見つけた
303See Other別の場所を探せ
304Not Modified変更なし
305Use Proxy中継サーバを通せ
307Temporary Redirect一時的な転送
4xx:Client Error (クライアントエラー)
400Bad Request不正なリクエスト
401Unauthorized未認証
402Payment Required有料である
403Forbiddenアクセス権がない
404Not Found存在しない
405Method Not Allowedそのメソッドは不可
406Not Acceptable受理不可
407Proxy Authentication Required中継サーバの認証が必要
408Request Time-out時間切れ
409Conflict競合
410Gone消滅した
411Length Required長さを指定せよ
412Precondition Failed前提条件が満たされていない
413Request Entity Too Largeリクエストデータが大きすぎ
414Request-URI Too LargeURIが長すぎる
415Unsupported Media Typeそのメディアは使えない
5xx:Server Error (サーバエラー)
500Internal Server Errorサーバ内部のエラー
501Not Implementedその機能は実装されていない
502Bad Gateway中継サーバのエラー
503Service Unavailableサービス停止中
504Gateway Time-out中継サーバの要求が時間切れ
505HTTP Version not supportedそのHTTPバージョンは不可