Hypertext Transfer Protocol

出典: フリー百科事典『ウィキペディア(Wikipedia)』
HTTPから転送)
Hypertext Transfer Protocol
通信プロトコル
目的 ハイパーテキストなどの転送
開発者
導入 1991年 (33年前) (1991)
派生先 HTTP/2HTTP/3WebDAV
OSI階層 アプリケーション層
ポート 80
RFC
  • 共通: RFC 9110, RFC 9111
  • HTTP/1.1: RFC 9112
  • HTTP/2: RFC 9113
  • HTTP/3: RFC 9114

Hypertext Transfer ProtocolHTTP/[1]

[]


TCPQUICHTTP1&[1]

HTTP1HTTPHTTPHTTPHTTP

HTTPWorld Wide WebWebWebHTTPHTTPHTMLJavaScript

HTTP GET /apple.jpg apple.jpg URL

World Wide WebWebUniform Resource IdentifierHTTP 使http:  URL 使URL 
http://www.example.co.jp/~test/samples/index.html

 HTTP/0.9 URLHTTP/1.0 

POST使

NNTPSMTPHTTP cookie

HTTP/1.1  HTTP/2HTTP/3HTTP#



TCP80使HTTP/0.91.1HTTP/2

TLSHTTPHTTPShttpsURI1HTTP over SSL/TLSHTTP/3

HTTP  (stateless) 使Web Cookie Netscape Communications Corporation Cookie 使

CRLFHTTP/0.91.1

[]


1990WebWebHTTP

HTTP199875%HTTP

HTTP/0.912HTTP/1.1176

HTTP/0.9[]


1991[2] GET HTTP/0.9 
GET /index.html

HTTP/1.0[]


19965 RFC 1945  RFC  POST  GET HTTP/0.9 
HTTP/1.0のリクエスト
GET /index.html HTTP/1.0

HTTP/1.1[編集]


19971 RFC 2068 3RFC 9112

Host
HTTP/1.1のリクエスト
GET /index.html HTTP/1.1
Host: foo.example.com

HTTP/2[編集]


HTTP/2HTTP/1.1Google[3]GoogleChromeOperaFirefoxAmazon SilkHTTPSPDY[4]

HTTP/3[編集]

HTTP-over-QUIC(hq)としてIETFが開発していた新たな通信プロトコルが、HTTP/3へと改名される。[5] IETFが策定を進めているQUICトランスポート層におけるプロトコルの名称であり、アプリケーション層プロトコルであるHTTP-over-QUICとの区別を明確にするため、このような名称変更に至った。[6]

HTTP/2と比べ、多重化するストリームの取り扱いが下位層のQUICへ移行したこと[7]ヘッドオブラインブロッキング英語版を回避するためのヘッダ圧縮の変更(HTTP/3用にQPACKが開発されている)[8]などの差異がある。

動作[編集]

通信の開始[編集]

他のプロトコル同様、クライアント側とサーバ側では役割が大きく異なる。HTTP通信を開始できるのはクライアント側のみである。

クライアント側がサーバにリクエストを送り、サーバがクライアントにレスポンスを返すのが最も典型的なHTTPのやりとりである。

接続[編集]

システム間でメッセージをやりとりするには接続を確立させる必要がある。HTTP/0.9~HTTP/1.1およびHTTP/2ではTCPを使用する。

HTTP/0.9ではクライアントのリクエストごとにTCP接続を確立させる必要があった。これは当時のWebサイトがシンプルなテキストベースであることが多かったためである。近年ではJavaScriptやアニメーション画像など、多数のオブジェクトが埋め込まれたWebサイトが一般的となってきており、これらのオブジェクトを取得するたびにTCP接続を確立するのはサーバやネットワークに大きな負担を強いるため、1回のTCP接続で、複数のHTTPリクエスト・レスポンスをやり取りする持続的接続がHTTP/1.0の拡張として導入された。その後、HTTP/1.1では、持続的接続がデフォルトとなった。すなわち、何も指定しなければ持続的接続となり、持続的接続を望まなければヘッダーフィールドにConnection: closeを追加する仕様となっている。

パイプライン[編集]

クライアントは前のリクエストに対するサーバの応答を待たずに別のリクエストを発行できる。

リクエストメソッド[編集]

HTTPでは8つのメソッドが定義されている。ただし、実際のHTTP通信ではGETとPOSTメソッドが大部分を占める。

HTTPメソッドの一覧
メソッド HTTP/0.9 HTTP/1.0 HTTP/1.1
GET
POST
PUT
HEAD
DELETE
OPTIONS
TRACE
CONNECT
GET
指定されたURIのリソースを取り出す。HTTPの最も基本的な動作で、HTTP/0.9では唯一のメソッド。
POST

GETWeb稿使GET

PUT

URIURIURI

DELETE

URI

OPTIONS

調HTTP

HEAD

GETHTTPWebWebWeb

TRACE

WindowsTracertUNIXTraceroute

CONNECT

TCPIETFTunneling TCP based protocols through Web proxy servers[9]RFC 2817 RFC 7230 [10]

HTTPIANAHypertext Transfer Protocol (HTTP) Method Registry[11]WebDav使 RFC 5789 PATCH

[]

[]


1HTTP

WebWebISP11Web

IPHTTP/1.01 foo.example.com  bar.example.com 2Web http://foo.example.com/index.html DNS foo.example.com IPIP使GET index.html  bar.example.comIP index.html 

IPIPv4HTTP/1.1Host

HTTP
  • HTTP/1.1: Hostヘッダーフィールドでホスト名を指定する。
  • HTTP/2およびHTTP/3: :authority疑似ヘッダーフィールドでホスト名を指定する。

リダイレクト[編集]

別のURIに対して再度のメソッド実行を要求する機能である。301 Movedや303 See Otherなどのリダイレクトを指示するステータスコードとURIを受け取り、クライアントはこのURIに再度メソッドを実行する。

クッキー[編集]

HTTPメッセージ[編集]

リクエストとレスポンスでやり取りされるデータは、HTTPメッセージと呼ばれる。クライアントからリクエストHTTPメッセージを送り、サーバーからレスポンスHTTPメッセージを返す。

HTTPメッセージは以下で構成される[12]

  • コントロールデータ
  • ヘッダー
  • コンテント
  • トレイラー

なおHTTP/1.1では、コントロールデータをリクエスト行・ステータス行として表現し、コンテントを格納する部分をメッセージボディまたは単にボディと呼ぶ。

ヘッダー・コンテント・トレイラーは空となる場合もある。

下にもっとも単純なクライアントとサーバ(www.google.co.jp:80)とのやり取りの例を挙げる。

クライアントのリクエスト:

GET / HTTP/1.1
Host: www.google.co.jp

この例では、リクエスト行とヘッダーにフィールドが1項目あるのみで、ボディは空でトレーラーも無い。 リクエスト行はメソッド、リクエストターゲット、HTTPバージョンの3つの要素から構成され、それぞれスペースで区切られる。 メソッドはGET、リクエストターゲットは「/」、HTTPバージョンは1.1である。

GETはリソースを取得するためのメソッドであり、リクエストターゲットの「/」はURIのパス部分であってルートリソースを対象にしたリクエストであることを示している。

サーバのレスポンス:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html
Set-Cookie: PREF=ID=72c1ca72230dea65:LD=ja:TM=1113132863:LM=1113132863:S=nNO7MIp
W2o7Cqeu_; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.jp
Server: GWS/2.1
Date: Sun, 10 Apr 2005 11:34:23 GMT
Connection: Close

<html><head><meta http-equiv="content-type" content="text/html; charset=Shift_JI
 S"><title>Google</title><style><!-- 
……以下省略 -->

HTTP 200OK

2

HTTP[]



フィールド名: 内容



User-Agent使Accept-Language辿URLReferer

HostHTTP/1.1HTTP/1.0 HostHTTP/1.0使Host

HTTPヘッダフィールドの一覧[編集]

リクエストヘッダ
ヘッダ 概要 HTTP/0.9 HTTP/1.0 HTTP/1.1
Accept クライアントの受け入れ可能コンテンツタイプを示す
Accept-Charset クライアントの受け入れ可能文字セットを示す
Accept-Encoding クライアントの受け入れ可能文字エンコーディングを示す
Accept-Language クライアントの受け入れ可能言語を示す
Authorization クライアントの認証情報を示す
Cookie クライアントの状態管理情報をサーバに返す
Cookie2 HTTP/1.1のSet-Cookie2ヘッダの受け入れ可能をサーバに知らせる
Expect クライアントがサーバに期待する動作を示す
From リクエスト発行者個人の情報を示す。一般的に電子メールアドレスを使用する
Host 要求しているオブジェクトがあるホストを示す
If-Match if文を用い条件が真の場合のみリクエストを処理するようサーバに要求する
If-None-Match If-Matchの逆で条件が真でない場合のみリクエストを処理する要求
If-Range 条件が真の場合のみ指定したオブジェクトの範囲を返すようサーバに要求する
If-Modified-Since 指定日時以降にオブジェクトが変更されている場合のみリクエストを処理するよう要求する
If-Unmodified-Since If-Modified-Sinceの逆で真でないときのみ実行する
Max-Forwards リクエストの中間システム経由数を最大いくつまでかを指定する
Proxy-Authorization クライアントがプロキシサーバに対して自身の認証を行う
Range オブジェクト全体でなくリソースの一部を要求する
Referer リクエストの出所を示す。一般的にはユーザの辿ったWebページのURLが用いられる
TE レスポンスの受け入れ可能転送エンコーディングを示す
User-Agent クライアントのWebブラウザなどの情報を示す
レスポンスヘッダ
ヘッダ 概要 HTTP/0.9 HTTP/1.0 HTTP/1.1
Accept-Ranges オブジェクトの一部に対するリクエストをサーバが受け入れ可能か示す
Age オブジェクトの経過時間を秒単位で返す
ETag オブジェクトのエンティティタグ値を示す
Location オブジェクトの場所を示す
Proxy-Authenticate プロキシサーバがクライアントに認証を要求するときに用いる
Retry-After リクエストの再試行をいつ行うかをクライアントに通知する
Server サーバのベンダー名、バージョン番号を示す
Set-Cookie2 サーバがクライアントにCookieを送信するときに用いる
Vary サーバがレスポンス内容を決定する際にリクエストURI以外に用いたヘッダのリストを示す
WWW-Authenticate クライアントに対してリクエストの再発行を要求する。認証情報も含まれる
一般ヘッダ
ヘッダ 概要 HTTP/0.9 HTTP/1.0 HTTP/1.1
Cache-Control メッセージの経由する中間キャッシュの動作を指示する
Connection 当該の接続に対するオプションを指示する
Date メッセージの作成日時を示す
Pragma メッセージに関する追加情報を示す
Trailer メッセージボディの後に追加のヘッダーが表れることを示す
Transfer-Encoding クライアントの転送を目的としたオブジェクトのエンコーディングを示す
Upgrade 通信相手に別のプロトコルにアップデートするよう要求する
Via プロキシサーバなど中継地点を示す。
Warning メッセージに関する追加情報を示す。通常はキャッシュの問題を警告するときに使われる
エンティティヘッダ
ヘッダ 概要 HTTP/0.9 HTTP/1.0 HTTP/1.1
Allow オブジェクトがサポートするHTTPメソッドを示す
Content-Encoding オブジェクトのエンコーディングを示す
Content-Language オブジェクトの言語(人間の言語)を示す
Content-Length オブジェクトのサイズをバイト単位で示す
Content-Location オブジェクトの場所を示す
Content-MD5 オブジェクトのメッセージダイジェストを運ぶ
Content-Range メッセージボディで運ばれるオブジェクトの範囲を示す
Content-Type オブジェクトのタイプを示す
Expires オブジェクトの有効期限の日時を示す
Last-Modified オブジェクトが最後に変更された日時を示す
Accept
サーバのレスポンスに含まれるメッセージボディで受け入れることが出来るコンテンツタイプと各コンテンツタイプの相対的な優先度を指定するリクエストヘッダ。指定できるコンテンツタイプはIANAによって定義されている。
Accept: text/plain; q=0.5, text/html,
	text/x-dvi; q=0.8, text/x-c

Accept40.50.8011.0
text/plain; q=0.5

text/html

text/x-dvi; q=0.8

text/x-c

Accept-Charset

AcceptIANA
Accept-Charset: UTF-8, *; q=0.8

UTF-80.8HTTPISO-8859-1

Accept-Encoding


Accept-Encoding: gzip, deflate

gzipzlib

Accept-EncodingIANAHTTP Content Coding Registry[13]

Accept-Language

IETFAccept-
Accept-Language: en-gb, en; q=0.8



Accept-Ranges

Accept2

Age

Age

Allow


Authentication-info



Authorization



Cache-Control



Connection

使
keep-alive



close



upgrade



Content-Encoding


Content-Language

使Accept-Language

Content-Length


Content-Location


Content-MD5

MD5MD5[14]RFC 7231[15]

Content-Range



Content-Type
メッセージボディに含まれるオブジェクトタイプを示す。次の例はリソースがテキストファイル、文字セットはISO-8859-4を使用していることを示している。
Content-Type: text/plain; Charset=ISO-8859-4
Cookie

HTTP
Cookie: $Version="1"; NAME="VALUE";
        $Path="/shopping"; $domain="www.shop.com"+
        $Port="80"

$VersionHTTPNAME$使

Cookie2

CookieCookie2

Date

Last-Modified

HTTP/1.1RFC 72317.1.1.1. Date/Time FormatsHTTP/1.1RFC 2616RFC 1123
Date: Sun, 06, Nov 1994 08:49:37 GMT

HTTPDateDate

ETag

使

Expect

100 Continue使
Expect: 100-continue

417 Expectation FailedExpect

Expires

Expires1
Expires: Thu, 28 Aug 2010 16:00:00 GMT

Cache-Controlmax-ageExpires

From

1990使
From: user@example.com

Host

HTTP/1.1HostWebHTTP#

If-Match

ETag

(一)AHTTPETag1234

(二)BHTTPETag1234

(三)AHTTPETagETag: 1234ETag: 1234

(四)AHTTPETag1256

(五)BHTTPETagETagETag

(六)B

If-Modified-Since



If-None-Match

If-MatchETag

If-Range



If-Unmodified-Since

If-Modified-Since

Last-Modified

If-Modified-Since

Location

URL3xx使201 Created使Content-Location

Max-Forwards

OPTIONTRACE

HTTP[]


31xx2xx3xx4xx5xx

セキュリティ技術[編集]

いくつかの観点でセキュリティに関する追加機能が存在する。

HTTPS[編集]

セキュアな通信路でHTTP通信を行うことを通常HTTPSと言う。

HTTP認証[編集]


HTTP

Basic[]


HTTP/1.1使[16]TLS (HTTPS)401

Digest認証[編集]

規格[編集]

HTTPはIETFを始めとした標準化団体により規格化されている。以下はその一部である。

セマンティクス キャッシュ 手続き
HTTP/1.1 RFC 9110 RFC 9111 RFC 9112
HTTP/2 RFC 9113
HTTP/3 RFC 9114

3v1.1, v2, v3[17]

[]


HTTPSHTTPHTTP

WebDAV: HTTP

WebSocket: 

Internet Printing Protocol (IPP): 

UPnPHTTPUDP使HTTPU使HTTPMU

Hyper Text Coffee Pot Control Protocol (HTCPCP): 

HTTP RFC 9205 Building Protocols with HTTP (BCP 56)

脚注[編集]



(一)^ ab"The Hypertext Transfer Protocol (HTTP) is a family of stateless, application-level, request/response protocols ... HTTP is a stateless request/response protocol for exchanging 'messages' across a connection." RFC 9110.

(二)^ The HTTP Protocol As Implemented In W3

(三)^ Sebastian Anthony (2012328). S&M vs. SPDY: Microsoft and Google battle over the future of HTTP 2.0.  ExtremeTech. 2014923

(四)^ Jerome Louvel (2011106). Can the rise of SPDY threaten HTTP?.  Restlet. 2014923

(五)^ GigazineUDPHTTP-over-QUICHTTPHTTP/3.  GIGAZINE (20181114). 20181114

(六)^ IETF Meeting

(七)^ QUIC (QUIC). ASnoKaze blog (20181031). 2019512 QUICQUIC

(八)^ QUIC (QUIC). ASnoKaze blog (20181031). 2019512 HPACKQUICQPACK

(九)^ RFC [https://datatracker.ietf.org/doc/html/rfc2817 2817 Upgrading to TLS Within HTTP/1.1] (20005). 2019426 The CONNECT method was originally described in a Work in Progress titled, "Tunneling TCP based protocols through Web proxy servers", by Ari Luotonen of Netscape Communications Corporation.

(十)^ RFC [https://datatracker.ietf.org/doc/html/rfc7230 7230 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing] (20146). 2019426 This specification also updates the use of CONNECT to establish a tunnel, previously defined in RFC 2817, and defines the "https" URI scheme that was described informally in RFC 2818.

(11)^ Hypertext Transfer Protocol (HTTP) Method Registry

(12)^ RFC 9110, 6. Message Abstraction

(13)^ HTTP Content Coding Registry

(14)^ RFC [https://datatracker.ietf.org/doc/html/rfc1864 1864 The Content-MD5 Header Field] ().  Internet Engineering Task Force (199510). 2021130 This document specifies a data integrity service that protects data from accidental modification while in transit from the sender to the  recipient.

(15)^ RFC [https://datatracker.ietf.org/doc/html/rfc7231 7231 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content] ().  Internet Engineering Task Force (20146). 2021130 The Content-MD5 header field has been removed because it was inconsistently implemented with respect to partial responses.

(16)^ HTTP&Web Stephen Thomas 西  []

(17)^ JPNIC News & Views vol.1647103IETF [4]  HTTP over QUICHTTP/3. (20181213). 2021628

関連項目[編集]

外部リンク[編集]

以下は旧式であり非推奨となった仕様

その他