HTTP (Hypertext Transfer Protocol)は、インターネット上でアプリケーション間コネクション上を行う、リクエスト/レスポンス型・ステートレス・メッセージ指向通信プロトコルである。
概要
TCPやQUIC (HTTP/3で関連)は、アプリケーション間のコネクション型通信を提供する(これをトランスポート層という)。HTTPは、このコネクション場を、リソースの要求と返答が、メッセージ単位で、1往復のクライアントリクエストとサーバーレスポンスという形で通信される。
…と定められている。
HTTPの発明によって、インターネットのリソースの公開とアクセスが容易になった。
クライアントとサーバー間で接続が確立した後にメッセージを送るだけでデータが返ってくるため、これが実現される。
HTTPの発明目的であり、今でも使用されている場面がWorld Wide Webである。WebサーバーとWebブラウザは通常HTTPで通信し、返ってきたデータからページを組み立ててブラウザが表示している。
歴史
イギリスの物理学者ティム・バーナーズ=リーは1990年末、ロバート・カイリューと共に初のWebブラウザとWebサーバを作成した。ブラウザには通信をするためのプロトコルが必要だったので、二人はHTTPの最初期のバージョン(HTTP/0.x) を設計した。
以来インターネットの大部分をHTTP通信が占めるようになり、1998年にはインターネット上の通信の75%がHTTPによるものになった。
最初期のHTTP/0.9の仕様書はもともと、紙1枚で済むような非常に簡素なものだったのだが、2度のバージョンアップを経た後のHTTP/1.1(現在でも使用される)の仕様書は実に176ページ近くの分量に膨れあがった。
HTTP/0.9
1991年に最初にドキュメント化されたバージョン。メソッドはGETしかなかった。レスポンスは単純にドキュメントの内容で、サーバー側はレスポンスを返してコネクションを切断するだけだ。
これだけ単純だから1枚で済むわけだ。
GET /index.html
HTTP/1.0
1996年5月に発表された。仕様が RFC で扱われるようになった。メソッドに POST など、 GET 以外のものが増えた。
- レスポンスにヘッダーがつくようになった。
- ヘッダーにHTTPステータスコードを含めるようになった。
- HTTP/0.9 との区別のため、リクエストプロトコルにバージョンを含めることになった。
GET /index.html HTTP/1.0
HTTP/1.1
現代で使われるHTTPプロトコルバージョンの1つである。
1997年1月に初版が発表された。その後3回改訂され、現在はセマンティクス・キャッシングを除く部分が RFC 9112 で規定されている。
- Hostヘッダーフィールドの規定が追加された。
- TLSがサポートされた。
- Keep-Aliveがデフォルト化され、通信が高速化された。
GET /index.html HTTP/1.1
Host: foo.example.com
HTTP/2
HTTP/2の目標はHTTP/1.1のトランザクション・セマンティクスとの完全な後方互換性を維持したまま非同期な接続の多重化、ヘッダ圧縮、リクエストとレスポンスのパイプライン化を実現することである。
- テキストベースからバイナリベースへ変化した。
- ストリームを使ったデータ送受信の実現
- サーバープッシュ型に対応した。
- ヘッダの圧縮が可能になった。
HTTP/3
HTTP/3ではTCPからQUICというプロトコルに変化した。QUICはUDPソケットの上で通信を行うため、安全性はもともと低かった。その信頼性はQUICが担保しており、TLSにも対応している。