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