[3] [DFN[[RUBYB[[[トンネル]]]@en[tunnel]]]]は、2つの[[接続]]の間で[[メッセージ]]を変更せずに盲目的に中継するものです [SRC[>>2]]。

[4] [[トンネル]]は、 [[HTTP要求]]によって開始されることもありますが、
一旦活性化した後は [[HTTP]] 通信の当事者とはみなしません。 [SRC[>>2]]

[5] [[トンネル]]は、中継されている[[接続]]の両端が閉じられた時、存在しなくなります [SRC[>>2]]。

* 仕様書

[REFS[
- [2] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#page-10>
]REFS]

* 意味

[7] [[トンネル]]における通信は [[HTTP]] ではなく、[[クライアント]]と[[鯖]]の間で何らかの方法で合意された[[プロトコル]]による通信となります。
[[トンネル]]は一旦確立されるとデータを何も変更せずに[[転送]]するだけです。

[8] ほとんどの場合、[[トンネル]]は [[HTTPS]] の通信を[[串]]を通過させるために使います。
[[対象資源]]として指定された[[ホスト]]・[[ポート]]に
[[TCP]] で[[接続]]し、[[クライアント]]に[[応答]]を返して以後[[クライアント]]と接続したホストとの間で送受信データを中継します。

;; 詳細は [CODE(HTTP)@en[[[CONNECT]]]] を参照。

* 処理モデル

[6] [CODE(HTTP)@en[[[CONNECT]]]] の項を参照してください。

* 歴史

[FIG(quote)[
[FIGCAPTION[
[1] [[HTTP]] ([[RFC1945]] 1.2, [[RFC2068]] 1.3, [[RFC2616]] 1.3)
]FIGCAPTION]

>
:tunnel: [DEL[A tunnel is an]] [INS[[INS[{2068,2616}]] An]]
intermediary program which is acting as a blind relay between two connections. Once active, a tunnel is not considered a party
to the HTTP communication, though the tunnel may have been
initiated by an HTTP request. The tunnel ceases to exist when both
ends of the relayed connections are closed. [DEL[[INS[{1945}]] Tunnels are used when a portal is necessary and the intermediary cannot, or should not, interpret the relayed communication.]]

:トンネル: 二つの[[接続]]の盲目中継者として動作する媒介プログラム。
一度活性になれば、トンネルは HTTP 通信の当事者とはみなされず、
トンネルをくぐって HTTP [[要求]]を始めて構いません。
トンネルは、中継している接続の両方の末端が閉じたときに存在しなくなります。 [DEL[トンネルは、玄関が必要で、媒介者が中継する通信を解釈できないか、または解釈するべきではない時に使われます。]]
]FIG]